JavaRush /Blog Java /Random-MS /Bagaimana untuk mencetak nombor dari 1 hingga 100 di Jawa...

Bagaimana untuk mencetak nombor dari 1 hingga 100 di Jawa tanpa gelung dan syarat?

Diterbitkan dalam kumpulan
Siaran ini ditujukan terutamanya untuk mereka yang bersedia untuk temu duga. Di sinilah mereka suka bertanya teka-teki sebegini. Malah, tugas yang dihadapi lebih mudah dan lebih logik untuk diselesaikan dengan kitaran dan keadaan. Dan kami berpendapat bahawa mana-mana pelajar JavaRush akan dapat melakukan ini selepas peringkat keempat pencarian Java Syntax . Tetapi sebahagian besar kaedah di atas direka untuk mereka yang telah "memasuki" Java Multithreading . Nota: Ini adalah tentang tidak menggunakan gelung dan syarat secara langsung. Malah, ia secara tersirat "terbina dalam" kebanyakan penyelesaian yang disebutkan. Bagaimana untuk mencetak nombor dari 1 hingga 100 di Jawa tanpa gelung dan syarat?  - 1
Mungkin anda mempunyai penyelesaian anda sendiri untuk masalah ini? Kongsi dalam komen!

Jadi, kaedah 1: tulis sahaja!

Sudah tentu, perkara pertama yang terlintas di fikiran pemula ialah carian terus. Tidak rasional, tetapi mudah dan boleh difahami. Tepat dengan cara yang sama kami menyelesaikan masalah dalam tahap pertama 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"
);
Tetapi, anda mesti mengakui, ia entah bagaimana membosankan. Oleh itu, anda boleh menggunakan kaedah kedua.

Kaedah 2: gunakan rentetan dan gantikan kepadaString

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 @Overridemenunjukkan bahawa kita akan mengatasi kaedah kelas asas. Dalam kes ini kita mengatasi toString. Malah, ini, seperti hampir semua penyelesaian berikut, mengandungi gelung. Kitaran ini hanya dibina ke dalam kaedah yang digunakan.

Kaedah 3: gunakan rekursi

Untuk memahami rekursi, anda perlu memahami rekursi. Rekursi, atau fungsi yang memanggil dirinya sendiri, adalah topik yang sangat menarik, dan tidak selalu dapat difahami dengan segera. Pada JavaRush, ia diliputi dalam pencarian Java Collections (untuk kesempurnaan), tetapi sebenarnya ia boleh difahami dan digunakan (atau tidak digunakan... mengapa - anda akan mengetahui semasa mempelajari topik itu!) lebih awal, sejurus selepas mempelajari gelung dan lompat bersyarat.
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
    }

}
Catatan:di sini output dibuat bukan secara langsung, tetapi dalam susunan terbalik. Cuba tukar kod supaya nombor dipaparkan seperti yang dinyatakan dalam syarat, iaitu, dari 1 hingga 100. Kami sedang menunggu penyelesaian dalam komen!

Kaedah 4: gunakan 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 ialah cara penyegerakan untuk mengakses sumber. Di Jawa, semaphore diwakili olehSemaphoreperpustakaanjava.util.concurrent.

Kaedah 5: gunakan benang

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

Kaedah 6: Kenali perpustakaan anda!

Java mempunyai banyak perkara yang menarik. Contohnya, kelas java.util.BitSet. Ia membolehkan anda mencipta vektor bit yang saiznya berubah secara dinamik. Iaitu, objek kelas BitSetialah set bit tertib tertentu dengan nilai trueatau false. Pada mulanya semua bit adalah sama false. Untuk menyimpan set, jumlah memori yang diperlukan untuk menyimpan vektor sehingga bit paling ketara yang ditetapkan atau ditetapkan semula dalam program diperuntukkan - semua bit yang melebihinya dianggap sama 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);
    }
}

Kaedah 7: Gunakan kelas Vektor

Ya, kelas vektor sudah usang dan jarang digunakan. Namun, mengapa tidak?
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);
  }
}
Berdasarkan bahan dari Quora
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION