2016-07-12 4 views
-1

Also hier habe ich nur ein einfaches Java-Programm, das die Zahlen der Fibonacci-Sequenz berechnet. Es läuft gut. Es gibt keine Fehler. Das Programm fragt den Benutzer, wie viele Nummern der Fibonacci-Sequenz der Benutzer sehen möchte. Das einzige auffällige "Problem" ist, dass die Zahlen fast spontan berechnet und angezeigt werden. Wenn der Benutzer nach einer sehr großen Anzahl von Zahlen fragt, werden sie alle angezeigt. Dann muss der Benutzer nach oben scrollen, um alle von Anfang an zu lesen. Ich denke, es wäre gut, die println-Anweisungen zu verzögern, die die Zahlen für eine Sekunde zur besseren Lesbarkeit anzeigen. Der Benutzer hätte die Möglichkeit, jede Nummer einzeln zu lesen! Was wäre der professionelle Weg, um diesen Effekt zu erzielen? Ich brauche eine Anweisung, die das Programm nach jeder angezeigten Nummer ein wenig warten lässt. Was sollte ich meinem Code hinzufügen? Hier ist mein Code:Wie wird die Ausgabe einer Druckanweisung für eine Sekunde verzögert angezeigt?

import java.util.Scanner; 

public class FibonacciModified { 
public static void main(String[] args) { 
    System.out.print("This program will print out the "); 
    System.out.println("Fibonacci sequence of numbers."); 
    System.out.print("\n"); 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("How many numbers do you want?"); 
    int numbers = keyboard.nextInt(); 
    System.out.print("\n"); 
    int num1 = 0, num2 = 1, num3; 
    for (int z = 0; z < numbers; z++) { 
     switch (z) { 
      case 0: 
      System.out.println(num1); 
      break; 
      case 1: 
      System.out.println(num2); 
      break; 
      default: 
      num3 = num1 + num2; 
      System.out.println(num3); 
      num1 = num2; 
      num2 = num3; 
      break; 
     } 
    } 
    } 
} 
+2

'Thread.sleep'? –

+1

Meiner Meinung nach wäre die Ausgabe Ihrer Berechnung in eine Datei die ideale Lösung. –

+2

Lassen Sie den Benutzer wählen. Lassen Sie sie die Ausgabe zu "mehr", z. 'Java FibonacciModified | mehr. Jetzt bekommen sie eine Seite nach der anderen. Oder 'Java FibonacciModified | weniger "für Paginierungsunterstützung (zurück/vorwärts blättern). Oder ... Kurz gesagt: Lassen Sie den Benutzer wählen – Andreas

Antwort

1

Hier gehen Sie:

import java.util.Scanner; 

public class FibonacciModified { 
public static void main(String[] args) { 
    System.out.print("This program will print out the "); 
    System.out.println("Fibonacci sequence of numbers."); 
    System.out.print("\n"); 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("How many numbers do you want?"); 
    int numbers = keyboard.nextInt(); 
    System.out.print("\n"); 
    int num1 = 0, num2 = 1, num3; 
    for (int z = 0; z < numbers; z++) { 
     switch (z) { 
      case 0: 
      System.out.println(num1); 
      break; 
      case 1: 
      System.out.println(num2); 
      break; 
      default: 
      num3 = num1 + num2; 
      System.out.println(num3); 
      num1 = num2; 
      num2 = num3; 
      break; 
     } 
     try { 
      Thread.sleep(1000); // 1000 is 1 sec 
     } catch(InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
    } 
    } 
} 
1

hinzufügen Thread.sleep(1000) (1000 ist für Millisekunden, auch TimeUnit.SECONDS.sleep(1) tun könnte deutlicher zu sein), nachdem der for:

for (int z = 0; z < numbers; z++) { 
     Thread.sleep(1000); 

Sie müssen InterruptedException auf die hinzufügen throws von Haupt- oder die Ausnahme in einem try-Block behandeln, zB:

public static void main(String[] args) throws InterruptedException { 
+0

NetBeans zeigt diesen Fehler: nicht berichtete Ausnahme InteruptedException; muss gefangen oder für geworfen erklärt werden. – Galaxy

+0

Ich schrieb oben, dass Sie damit umgehen müssen, und ich habe ein Beispiel hinzugefügt (Ändern der wichtigsten Methodensignatur). –

0

Alles, was Sie tun müssen, ist, t Pause er Hauptthread mit Thread.sleep(milliseconds)

zum Beispiel direkt nach dem for-Schleife:

for (int z = 0; z < numbers; z++) { 
    Thread.sleep(500); 
    switch (z) { 
    ... 
0

Verwenden Sie die folgenden Verfahren, und rufen Sie diese Methode an allen Orten, die Sie rufen System.out.println.

public void printWithSleep(int x){ 
    try{ 
    Thread.sleep(1000); 
    System.out.println(x); 

    } catch(Exception e){ 
    //Eat or print the exception 
    } 

} 
1

Sie können auch mit dem unten nach jeder Iteration der Schleife gehen:

TimeUnit.SECONDS.sleep(1);//Stops execution of one sec

Die intern oben ruft Thread.sleep(). Der einzige zusätzliche Vorteil, den Sie hier haben würden, ist, dass Sie nicht die Anzahl der Millisekunden berechnen müssen, die Sie die Ausführung beenden möchten, die für das Funktionieren von Thread.sleep (Millisekunden) erforderlich ist.

TimeUnit bietet die Flexibilität, die Programmausführung von NANOSECONDS zu DAYS zu unterbrechen.

+0

Das ist gut, aber es akzeptiert keine Dezimalstellen wie 0,5. Wenn der Typumwandlungsoperator verwandt wird, wartet dieser Code nicht. – Galaxy

+0

@Galaxy, wenn Sie die Ausführung für eine halbe Sekunde stoppen möchten, dann würden Sie es so verwenden .... TimeUnit.MILLISECONDS.sleep (500); Dies stoppt die Ausführung für eine halbe Sekunde. TimeUnit akzeptiert immer lange Arten von Variablen für seine Schlafmethode. – Abhishek

Verwandte Themen