JavaRush /Java-Blog /Random-DE /Wie drucke ich in Java Zahlen von 1 bis 100 ohne Schleife...

Wie drucke ich in Java Zahlen von 1 bis 100 ohne Schleifen und Bedingungen?

Veröffentlicht in der Gruppe Random-DE
Dieser Beitrag richtet sich in erster Linie an diejenigen, die sich auf Vorstellungsgespräche vorbereiten. Hier stellen sie gerne solche Rätsel. Tatsächlich lässt sich die vorliegende Aufgabe mit Zyklen und Bedingungen einfacher und logischer lösen. Und wir glauben, dass jeder JavaRush- Schüler dazu in der Lage sein wird, nachdem er die vierte Stufe der Java-Syntax- Quest erreicht hat . Die überwiegende Mehrheit der oben genannten Methoden ist jedoch für diejenigen gedacht, die bereits in Java Multithreading „eingestiegen“ sind . Hinweis: Hier geht es darum, Schleifen und Bedingungen nicht direkt zu verwenden. Tatsächlich sind sie in den meisten der genannten Lösungen implizit „eingebaut“. Wie drucke ich in Java Zahlen von 1 bis 100 ohne Schleifen und Bedingungen?  - 1
Vielleicht haben Sie eine eigene Lösung für dieses Problem? Teilen Sie es in den Kommentaren!

Also, Methode 1: Schreiben Sie es einfach!

Das erste, was einem Anfänger in den Sinn kommt, ist natürlich die Direktsuche. Irrational, aber einfach und verständlich. Genauso haben wir Probleme in den ersten Levels von JavaRush gelöst.
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"
);
Aber Sie müssen zugeben, es ist irgendwie langweilig. Daher können Sie die zweite Methode verwenden.

Methode 2: Strings verwenden und toString überschreiben

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

    }
Die Anmerkung @Overridegibt an, dass wir eine Basisklassenmethode überschreiben werden. In diesem Fall überschreiben wir toString. Tatsächlich enthält diese, wie fast alle der folgenden Lösungen, Schleifen. Diese Zyklen sind einfach in die verwendeten Methoden eingebaut.

Methode 3: Rekursion verwenden

Um die Rekursion zu verstehen, müssen Sie die Rekursion verstehen. Rekursion oder der Aufruf einer Funktion selbst ist ein sehr interessantes Thema und nicht immer sofort verständlich. Auf JavaRush wird es in der Quest „Java-Sammlungen “ behandelt (der Vollständigkeit halber), aber tatsächlich kann es viel früher verstanden und verwendet (oder nicht verwendet ... warum – Sie werden es herausfinden, während Sie sich mit dem Thema befassen!) direkt nach dem Studium von Schleifen und bedingte Sprünge.
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);				// вызов метода со Bedeutungм 100
    }

}
Beachten Sie:hier erfolgt die Ausgabe nicht direkt, sondern in umgekehrter Reihenfolge. Versuchen Sie, den Code so zu ändern, dass die Zahlen wie in der Bedingung angegeben angezeigt werden, also von 1 bis 100. Wir warten auf Lösungen in den Kommentaren!

Methode 4: Semaphore verwenden

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();
    }
}
Semaphoren sind ein Synchronisationsmittel für den Zugriff auf eine Ressource. In Java werden Semaphoren durch dieSemaphoreBibliotheksklassejava.util.concurrent.

Methode 5: Threads verwenden

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

Methode 6: Kennen Sie Ihre Bibliotheken!

Java hat viele interessante Dinge. Zum Beispiel Klasse java.util.BitSet. Damit können Sie einen Bitvektor erstellen, dessen Größe sich dynamisch ändert. Das heißt, ein Klassenobjekt BitSetist eine bestimmte geordnete Menge von Bits mit Werten trueoder false. Zunächst sind alle Bits gleich false. Um den Satz zu speichern, wird die Speichermenge zugewiesen, die zum Speichern des Vektors bis zum höchstwertigen Bit erforderlich ist, das im Programm gesetzt oder zurückgesetzt wurde – alle darüber hinausgehenden Bits werden als gleich betrachtet 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);
    }
}

Methode 7: Verwenden Sie die Vector-Klasse

Ja, die Vektorklasse ist veraltet und wird äußerst selten verwendet. Dennoch, warum nicht?
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);
  }
}
Basierend auf Materialien von Quora
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION