JavaRush /Java Blog /Random-IT /Come stampare i numeri da 1 a 100 in Java senza loop e co...

Come stampare i numeri da 1 a 100 in Java senza loop e condizioni?

Pubblicato nel gruppo Random-IT
Questo post è destinato principalmente a coloro che si preparano per le interviste. È qui che a loro piace porre questo tipo di enigmi. In effetti, il compito da svolgere è più semplice e logico da risolvere con cicli e condizioni. E pensiamo che qualsiasi studente JavaRush sarà in grado di farlo dopo il quarto livello della ricerca sulla sintassi Java . Ma la stragrande maggioranza dei metodi di cui sopra sono pensati per coloro che sono già “entrati” nel multithreading Java . Nota: si tratta di non utilizzare direttamente loop e condizioni. In effetti, sono implicitamente “integrati” nella maggior parte delle soluzioni citate. Come stampare i numeri da 1 a 100 in Java senza loop e condizioni?  -1
Forse hai la tua soluzione a questo problema? Condividi nei commenti!

Quindi, metodo 1: scrivilo e basta!

Naturalmente, la prima cosa che viene in mente a un principiante è la ricerca diretta. Irrazionale, ma semplice e comprensibile. Esattamente nello stesso modo in cui abbiamo risolto i problemi nei primi livelli di 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"
);
Ma, devi ammetterlo, è in qualche modo noioso. Pertanto, puoi utilizzare il secondo metodo.

Metodo 2: utilizzare stringhe ed eseguire l'override di 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));

    }
L'annotazione @Overrideindica che sovrascriveremo un metodo della classe base. In questo caso stiamo sovrascrivendo toString. In effetti, questa, come quasi tutte le soluzioni seguenti, contiene dei loop. Questi cicli sono semplicemente integrati nei metodi utilizzati.

Metodo 3: utilizzare la ricorsione

Per comprendere la ricorsione, è necessario comprendere la ricorsione. La ricorsione, o una funzione che chiama se stessa, è un argomento molto interessante e non sempre immediatamente comprensibile. Su JavaRush è trattato nella ricerca Java Collections (per completezza), ma in realtà può essere compreso e utilizzato (o non utilizzato... perché - lo scoprirai studiando l'argomento!) molto prima, subito dopo aver studiato i loop e salti condizionali.
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
    }

}
Nota:qui l'output non viene effettuato in modo diretto, ma in ordine inverso. Prova a cambiare il codice in modo che i numeri vengano visualizzati come indicato nella condizione, ovvero da 1 a 100. Aspettiamo soluzioni nei commenti!

Metodo 4: utilizzare i semafori

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();
    }
}
I semafori sono un mezzo di sincronizzazione per accedere a una risorsa. In Java, i semafori sono rappresentati dallaSemaphorelibreriajava.util.concurrent.

Metodo 5: utilizzare i thread

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

Metodo 6: Conosci le tue librerie!

Java ha molte cose interessanti. Ad esempio, classe java.util.BitSet. Ti consente di creare un vettore di bit la cui dimensione cambia dinamicamente. Cioè, un oggetto di classe BitSetè un certo insieme ordinato di bit con valori trueo false. Inizialmente tutti i bit sono uguali false. Per memorizzare il set, viene allocata la quantità di memoria necessaria per memorizzare il vettore fino al bit più significativo che è stato impostato o ripristinato nel programma: tutti i bit che lo superano sono considerati uguali 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);
    }
}

Metodo 7: utilizzare la classe Vector

Sì, la classe vettoriale è obsoleta e viene utilizzata molto raramente. Eppure, perché no?
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);
  }
}
Basato su materiali di Quora
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION