JavaRush /Blog Jawa /Random-JV /Kepiye carane nyithak angka saka 1 nganti 100 ing Jawa ta...

Kepiye carane nyithak angka saka 1 nganti 100 ing Jawa tanpa puteran lan kahanan?

Diterbitake ing grup
Kiriman iki utamane kanggo sing nyiapake wawancara. Iki ngendi padha seneng takon jinis iki teka-teki. Nyatane, tugas sing ditindakake luwih gampang lan luwih logis kanggo diatasi kanthi siklus lan kahanan. Lan kita mikir manawa siswa JavaRush bakal bisa nindakake iki sawise tingkat papat saka pencarian Java Syntax . Nanging akèh-akèhé saka cara ing ndhuwur dirancang kanggo wong-wong sing wis "mlebu" Java Multithreading . Cathetan: Iki babagan ora nggunakake puteran lan kahanan langsung. Ing kasunyatan, padha implicitly "dibangun menyang" paling saka solusi kasebut. Kepiye carane nyithak angka saka 1 nganti 100 ing Jawa tanpa puteran lan kahanan?  - 1
Mungkin sampeyan duwe solusi dhewe kanggo masalah iki? Nuduhake ing komentar!

Dadi, cara 1: mung nulis!

Mesthine, bab pisanan sing ana ing pikiran pamula yaiku telusuran langsung. Ora rasional, nanging prasaja lan bisa dingerteni. Persis cara sing padha kita ngrampungake masalah ing tingkat pisanan 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"
);
Nanging, sampeyan kudu ngakoni, iki pancen mboseni. Mulane, sampeyan bisa nggunakake cara liya.

Cara 2: gunakake strings lan timpa 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));

    }
Anotasi kasebut @Overridenuduhake yen kita bakal ngilangi metode kelas dasar. Ing kasus iki kita overriding toString. Nyatane, iki, kaya meh kabeh solusi ing ngisor iki, ngemot puteran. Siklus iki mung dibangun ing metode sing digunakake.

Cara 3: nggunakake rekursi

Kanggo mangerteni rekursi, sampeyan kudu ngerti rekursi. Recursion, utawa fungsi nelpon dhewe, iku topik menarik banget, lan ora tansah langsung dingerteni. Ing JavaRush, ana ing quest Java Collections (kanggo jangkep), nanging nyatane bisa dingerteni lan digunakake (utawa ora digunakake ... kenapa - sampeyan bakal ngerti nalika sinau topik kasebut!) luwih awal, sanalika sawise sinau loop. lan mlumpat kondisional.
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
    }

}
Cathetan:kene output digawe ora langsung, nanging ing urutan mbalikke. Coba ganti kode kasebut supaya nomer kasebut ditampilake ing kondisi kasebut, yaiku, saka 1 nganti 100. Kita nunggu solusi ing komentar!

Cara 4: nggunakake semaphore

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();
    }
}
Semaphore minangka sarana sinkronisasi kanggo ngakses sumber daya. Ing Jawa, semaphore diwakili deningSemaphoreperpustakaanjava.util.concurrent.

Cara 5: Gunakake Utas

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

Cara 6: Ngerti perpustakaan sampeyan!

Jawa iku akeh perkara sing menarik. Contone, kelas java.util.BitSet. Ngidini sampeyan nggawe vektor bit sing ukurane diganti kanthi dinamis. Yaiku, obyek kelas BitSetminangka set bit sing diurutake kanthi nilai trueutawa false. Kaping pisanan kabeh bit padha false. Kanggo nyimpen set kasebut, jumlah memori sing dibutuhake kanggo nyimpen vektor nganti bit paling pinunjul sing disetel utawa direset ing program diparengake - kabeh bit sing ngluwihi iku dianggep padha false.
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);
    }
}

Cara 7: Gunakake kelas Vektor

Ya, kelas vektor wis lungse lan arang banget digunakake. Isih, kok ora?
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);
  }
}
Adhedhasar bahan saka Quora
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION