JavaRush /Java блогы /Random-KK /Java тілінде 1-ден 100-ге дейінгі сандарды циклдарсыз жән...

Java тілінде 1-ден 100-ге дейінгі сандарды циклдарсыз және шарттарсыз қалай басып шығаруға болады?

Топта жарияланған
Бұл пост негізінен сұхбатқа дайындалып жатқандарға арналған. Міне, олар осындай басқатырғыштарды сұрағанды ​​​​ұнатады. Шын мәнінде, тапсырманы циклдар мен шарттармен шешу оңайырақ және логикалық. Біздің ойымызша, кез келген JavaRush студенті Java синтаксисі квестінің төртінші деңгейінен кейін мұны істей алады . Бірақ жоғарыда аталған әдістердің басым көпшілігі Java Multithreading жүйесіне «енгізген» адамдарға арналған . Ескерту: Бұл циклдар мен шарттарды тікелей қолданбау туралы. Шындығында, олар айтылған шешімдердің көпшілігіне жанама түрде «кіріктірілген». Java тілінде 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 квестінде (толықтығы үшін) қамтылған , бірақ іс жүзінде оны түсінуге және қолдануға болады (немесе пайдаланбайды... неге - тақырыпты зерделеу кезінде біле аласыз!) әлдеқайда ертерек, циклдарды зерттегеннен кейін бірден. және шартты секірулер.
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-ге дейін көрсетілетін етіп өзгертіп көріңіз. Түсініктемелерде шешімдерді күтеміз!

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 тілінде семафорлар кітапханаарқылы ұсынылған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-әдіс: Кітапханаларыңызды біліңіз!

Java-да көптеген қызықты нәрселер бар. Мысалы, сынып java.util.BitSet. Ол өлшемі динамикалық түрде өзгеретін бит векторын құруға мүмкіндік береді. Яғни, сынып нысаны немесе 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