JavaRush /Java blogi /Random-UZ /Java-da 1 dan 100 gacha raqamlarni tsikllar va shartlarsi...

Java-da 1 dan 100 gacha raqamlarni tsikllar va shartlarsiz qanday chop etish mumkin?

Guruhda nashr etilgan
Ushbu post birinchi navbatda intervyuga tayyorlanayotganlar uchun mo'ljallangan. Bu erda ular bunday jumboqlarni so'rashni yaxshi ko'radilar. Aslida, vazifani davrlar va shartlar bilan hal qilish osonroq va mantiqiyroq. Va bizning fikrimizcha, har qanday JavaRush talabasi buni Java Syntax kvestining to'rtinchi darajasidan keyin amalga oshirishi mumkin . Ammo yuqoridagi usullarning aksariyati Java Multithreading-ga "kirish" qilganlar uchun mo'ljallangan . Eslatma: Bu to'g'ridan-to'g'ri ko'chadan va shartlardan foydalanmaslik haqida. Aslida, ular aytib o'tilgan echimlarning ko'pchiligiga bevosita "o'rnatilgan". Java-da 1 dan 100 gacha raqamlarni tsikllar va shartlarsiz qanday chop etish mumkin?  - 1
Balki sizda bu muammoga o'z yechimingiz bordir? Izohlarda baham ko'ring!

Shunday qilib, 1-usul: shunchaki yozing!

Albatta, yangi boshlanuvchining fikriga keladigan birinchi narsa - bu to'g'ridan-to'g'ri qidirish. Mantiqsiz, lekin oddiy va tushunarli. Xuddi shu tarzda biz JavaRushning birinchi darajalarida muammolarni hal qildik.
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"
);
Ammo, tan olishingiz kerak, bu qandaydir zerikarli. Shuning uchun siz ikkinchi usuldan foydalanishingiz mumkin.

2-usul: satrlardan foydalaning va toStringni bekor qiling

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));

    }
Izoh @Overridebiz asosiy sinf usulini bekor qilmoqchi ekanligimizni bildiradi. Bu holatda biz ustunlik qilamiz toString. Aslida, bu, deyarli barcha quyidagi echimlar kabi, looplarni o'z ichiga oladi. Ushbu tsikllar oddiygina ishlatiladigan usullarga kiritilgan.

3-usul: rekursiyadan foydalaning

Rekursiyani tushunish uchun siz rekursiyani tushunishingiz kerak. Rekursiya yoki o'zini chaqiradigan funksiya juda qiziqarli mavzu bo'lib, uni har doim ham darhol tushunib bo'lmaydi. JavaRush -da u Java Collections kvestida (to'liqligi uchun) yoritilgan , lekin aslida uni tushunish va ishlatish mumkin (yoki ishlatilmaydi ... nima uchun - mavzuni o'rganayotganda bilib olasiz!) va shartli sakrashlar.
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
    }

}
Eslatma:bu erda chiqish to'g'ridan-to'g'ri emas, balki teskari tartibda amalga oshiriladi. Raqamlar shartda ko'rsatilganidek, ya'ni 1 dan 100 gacha ko'rinishi uchun kodni o'zgartirib ko'ring. Izohlarda yechimlarni kutamiz!

4-usul: semaforlardan foydalaning

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();
    }
}
Semaforlar manbaga kirish uchun sinxronlash vositasidir. SemaphoreJava-da semaforlar kutubxonabilan ifodalanadijava.util.concurrent.

5-usul: iplardan foydalaning

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-usul: Kutubxonangizni biling!

Java juda ko'p qiziqarli narsalarga ega. Masalan, sinf java.util.BitSet. Bu sizga o'lchami dinamik ravishda o'zgarib turadigan bit vektorni yaratishga imkon beradi. Ya'ni, sinf ob'ekti yoki BitSetqiymatlari bo'lgan ma'lum bir tartiblangan bitlar to'plamidir . Dastlab barcha bitlar tengdir . To'plamni saqlash uchun vektorni dasturda o'rnatilgan yoki qayta o'rnatilgan eng muhim bitgacha saqlash uchun zarur bo'lgan xotira miqdori ajratiladi - undan oshib ketgan barcha bitlar teng hisoblanadi . 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-usul: Vektor sinfidan foydalaning

Ha, vektor sinfi eskirgan va juda kam ishlatiladi. Shunday bo'lsa-da, nima uchun?
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 materiallari asosida
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION