JavaRush /Java блогу /Random-KY /Java тилинде 1ден 100гө чейинки сандарды циклсиз жана шар...

Java тилинде 1ден 100гө чейинки сандарды циклсиз жана шарттарсыз кантип басып чыгаруу керек?

Группада жарыяланган
Бул пост биринчи кезекте интервьюга даярдангандар үчүн арналган. Бул жерде алар ушул сыяктуу табышмактарды сураганды жакшы көрүшөт. Чындыгында, тапшырманы циклдер жана шарттар менен чечүү оңой жана логикалуу. Жана биз ар бир JavaRush студенти муну Java Syntax квестинин төртүнчү деңгээлинен кийин жасай алат деп ойлойбуз . Бирок жогоруда аталган ыкмалардын басымдуу көпчүлүгү Java Multithreadingге "киргизген" адамдар үчүн иштелип чыккан . Эскертүү: Бул циклдерди жана шарттарды түз колдонбоо жөнүндө. Чындыгында, алар айтылган чечимдердин көпчүлүгүнө кыйыр түрдө "курулган". Java тorнде 1ден 100гө чейинки сандарды циклсиз жана шарттарсыз кантип басып чыгаруу керек?  - 1
Балким, бул көйгөйдү чечүү үчүн өзүңүздүн чечимиңиз бардыр? Комментарийлерде бөлүшүңүз!

Ошентип, 1-ыкма: жөн гана жаз!

Албетте, башталгычтын оюна келген биринчи нерсе бул түз издөө. Акылга сыйбаган, бирок жөнөкөй жана түшүнүктүү. Дал ушундай жол менен биз JavaRushтун биринчи деңгээлдериндеги көйгөйлөрдү чечтик.
System.out.println("1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 ,
21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 ,
43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 ,
65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 ,
97 , 98 , 99 , 100"
);
Бирок, моюнга алышыңыз керек, бул кандайдыр бир кызыксыз. Ошондуктан, сиз экинчи ыкманы колдоно аласыз.

Метод 2: саптарды колдонуңуз жана toString жокко чыгарыңыз

public static void main(String[] args) {

        Object[] numbers = new Object[100];
        Arrays.fill(numbers, new Object() {    //создаем анонимный класс
            private int count = 0;
            @Override
            public String toString() {
                return Integer.toString(++count);
            }
        });
        System.out.println(Arrays.toString(numbers));

    }
Аннотация @Overrideбиз базалык класстын ыкмасын жокко чыгара турганыбызды көрсөтүп турат. Бул учурда биз үстөмдүк кылабыз toString. Чынында, бул, дээрлик бардык төмөнкү чечимдер сыяктуу, илмектерди камтыйт. Бул циклдер жөн гана колдонулган ыкмаларга курулган.

Метод 3: рекурсияны колдонуңуз

Рекурсияны түшүнүү үчүн рекурсияны түшүнүү керек. Рекурсия же өзүн чакырган функция абдан кызыктуу тема жана дайыма эле түшүнүктүү боло бербейт. JavaRushте ал Java Collections квестинде камтылган (толуктугу үчүн), бирок чындыгында аны түшүнүүгө жана колдонууга болот (же колдонулbyte... эмне үчүн - теманы окуп жатканда билесиз!) жана шарттуу секирүү.
public class Recursion {

    public void ShowNums(int i) {
    // метод, который печатает

        int x = 1;

// блок try проверяет, достигли ли мы нуля
        try {
            int m = x / i;				// здесь выбрасывается исключение при i = 0
            System.out.println(i);
            i--;
            ShowNums(i);				// а вот и рекурсивный вызов
        }
        catch(ArithmeticException e) {
		// деление на нуль выбрасывает ArithmeticException
            return;					// Останавливается при попытке деления на нуль
        }

    }

     public static void main(String[] args) {

        Recursion r = new Recursion();
        r.ShowNums(100);				// вызов метода со meaningм 100
    }

}
Көңүл буруңуздар:бул жерде чыгаруу түз эмес, тескери тартипте жүргүзүлөт. Сандар шартта көрсөтүлгөндөй, башкача айтканда, 1ден 100гө чейин көрсөтүлүшү үчүн codeду өзгөртүп көрүңүз. Биз комментарийлерде чечимдерди күтөбүз!

Метод 4: семафорлорду колдонуңуз

public class To100 {
    public static void main(String[] args) {
        final int max = 100;
        new java.util.concurrent.Semaphore(max) {
            void go() {
                acquireUninterruptibly();
                System.err.println(max-availablePermits());
                go();
            }
        }.go();
    }
}
Семафорлор - бул ресурска жетүү үчүн синхрондоштуруу каражаты. SemaphoreJava тorнде семафорлор китепканаменен көрсөтүлөтjava.util.concurrent.

Метод 5: жиптерди колдонуу

public class Counter extends Thread{

    private int cnt;

    public Counter(){
        this.cnt = 0;
    }

    private void increment(){
        System.out.println(cnt++);
        try{
            Thread.sleep(1000);
        }catch(Exception e){}
        increment();
    }

    public void run(){
        increment();
    }

    public static void main(String[] args) throws Exception{
        Counter cntr = new Counter();
        cntr.start();
        cntr.join(100000);
        cntr.interrupt();
        System.exit(0);
    }
}

Метод 6: Китепканаңызды бorңиз!

Java көп кызыктуу нерселерге ээ. Мисалы, класс java.util.BitSet. Ал көлөмү динамикалык түрдө өзгөргөн бит векторун түзүүгө мүмкүндүк берет. Башкача айтканда, класс an objectи же BitSetмаанилери бар биттердин белгилүү бир иреттелген топтому . Башында бардык биттер бирдей . Топтомду сактоо үчүн, программада коюлган же баштапкы абалга келтирилген эң маанилүү битке чейин векторду сактоо үчүн талап кылынган эстутумдун көлөмү бөлүнөт - андан ашкан бардык биттер бирдей деп эсептелет . truefalsefalsefalse
public class To100 {
    public static void main(String[] args) {
        String set = new java.util.BitSet() {{ set(1, 100+1); }}.toString();
        System.out.append(set, 1, set.length()-1);
    }
}

Метод 7: Vector классын колдонуңуз

Ооба, вектор классы эскирген жана өтө сейрек колдонулат. Ошентсе да, эмне үчүн?
import java.util.Vector;

public class PrintOneToHundered {
  static int i;
  PrintOneToHundered() {}
  public String toString() { return ++i+""; }
  public static void main(String[] args) {
    Vector v1  =new Vector(); v1  .add(new PrintOneToHundered());
    Vector v2  =new Vector(); v2  .addAll(v1 ); v2  .addAll(v1 );
    Vector v4  =new Vector(); v4  .addAll(v2 ); v4  .addAll(v2 );
    Vector v8  =new Vector(); v8  .addAll(v4 ); v8  .addAll(v4 );
    Vector v16 =new Vector(); v16 .addAll(v8 ); v16 .addAll(v8 );
    Vector v32 =new Vector(); v32 .addAll(v16); v32 .addAll(v16);
    Vector v64 =new Vector(); v64 .addAll(v32); v64 .addAll(v32);
    Vector v100=new Vector(); v100.addAll(v64); v100.addAll(v32); v100.addAll(v4);
    System.out.println(v100);
  }
}
Quora материалдарынын негизинде
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION