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“.
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 @Override
gibt 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 dieSemaphore
Bibliotheksklassejava.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 Klassejava.util.BitSet
. Damit können Sie einen Bitvektor erstellen, dessen Größe sich dynamisch ändert. Das heißt, ein Klassenobjekt BitSet
ist eine bestimmte geordnete Menge von Bits mit Werten true
oder 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
Was gibt es sonst noch zu lesen: |
---|
Die 10 besten Java-Bibliotheken, um Zeit zu sparen Beste Bücher zur Vorbereitung auf die OCAJP8 (1Z0-808) Java 8-Prüfung |
GO TO FULL VERSION