2016-05-21 14 views
0

Ich bin ein Neuling in Java. Ich habe diese Tage angefangen und ich praktiziere den Fang und versuche eine Ausnahme. Ich habe diesen Code unten, der eine Operation zwischen Zahlen löst und ich würde gerne wissen, was ich tun kann, wenn ich zum Beispiel möchte, dass der Benutzer, sobald er eine Operation durchführt und sein Ergebnis bekommt, dass dies die Möglichkeit hat, zu machen eine andere Operation. Irgendetwas kommt auf eine Frage und fragt, ob er ein anderes Problem realisieren will und der Code von Anfang an wieder läuft.Wie kann man den Benutzer fragen und abhängig von seiner Antwort den gesamten Code erneut ausführen?

package justpractice; 
import java.util.*; 
public class Main { 


public static void main(String[] args) { 
    Scanner Operation = new Scanner(System.in); 

    int x=1; 

    while(x==1){ 
     try{ 
      System.out.println("Insert numerator"); 
      int n1 = Operation.nextInt(); 
      System.out.println("Insert denominator"); 
      int n2=Operation.nextInt(); 
      double division = n1/n2; 
      System.out.println(division); 
      x=2; 

    } 

    catch(Exception e){ 
      System.out.println("Insert a valid value"); 
    } 
    } 
} 



} 
+0

Es ist erwähnenswert, dass Ihre Division immer eine ganze Zahl ergeben wird, da Sie ganze Zahlen teilen –

Antwort

0

Sie tun können, zum Beispiel eine if-Anweisung mit einem

System.out.println("Do you want to recalculate ? (1/0 Yes/No)"); 
Operation.nextInt(); 

dann hinzufügen, wenn der Eingang 1 ist, halten x = 1, sonst tun x = 2.

0

Try diese Codeänderung;

package justpractice; 
import java.util.*; 
public class Main { 


public static void main(String[] args) { 
    Scanner Operation = new Scanner(System.in); 

    //better practice 
    while(true){ 
     try{ 
      System.out.println("Insert numerator"); 
      int n1 = Operation.nextInt(); 
      System.out.println("Insert denominator"); 
      int n2=Operation.nextInt(); 
      double division = n1/n2; 
      System.out.println(division); 
      System.out.println("Continue? (y/n)"); 
      String response = Operation.nextLine(); 
      if (response.equals("n")){ 
       break; 
      } 

     } 
     catch(Exception e){ 
      System.out.println("Insert a valid value"); 
     } 
    } 
} 
} 
0

Ihre Benutzer zu ermöglichen, wieder zu berechnen Division Sie eine do-while Schleife verwenden könnte. Mit dieser Schleife können Sie den Code einmal ausführen, den Benutzer fragen, ob er erneut berechnen möchte, und den Code wiederholen.

Ein Überblick über Ihren Code mit der Schleife würde dies so etwas wie:

... 
boolean again = true; 

do { //Main loop 
    try { 
     ... //Your division code 
     ... //Put code to ask the user if they want to calculate again here 
    } catch(Exception e) { 
     ... 
    } 
} while(again == true); //Repeat if the user wants to continue 

Zur Eingabe auf, wenn der Benutzer erneut berechnen will, empfehle ich eine andere do-while Schleifen mit Ihrem Scanner. Mit dieser Schleife können Sie den Code wiederholen, wenn die Antwort ungültig ist. In diesem Fall, wenn es nicht "y" oder "n" ist.

String input; 
do { 
    System.out.println("Would you like to continue? (y/n)"); 
    input = operation.next(); 
} while(!input.equalsIgnoreCase("y") && !input.equalsIgnoreCase("n")); 

Nachdem Sie die Eingabe des Benutzers erhalten haben, müssen Sie noch die Schleife beenden, wenn sie "n" sagte. Um dies zu tun, könnten Sie eine if Anweisung verwenden.

if(input.equalsIgnoreCase("n")) { 
    again = false; //Terminate the main loop 
    operation.close(); //Prevent any resource leaks with your Scanner 
} 

Es ist nicht notwendig, wenn die Benutzereingabe "y" als again zu überprüfen, um true standardmäßig eingestellt ist.

Seite Hinweis: Variablen sollten immer camelCase sein. Sehen Sie sich die Java Naming Conventions an, um mehr über die Namensgebung in Java zu erfahren.

EDIT: Der Grund für die Konsole wiederholt protokolliert, dass Sie eine nicht-Nummer eingegeben, obwohl Sie es einmal eingegeben, ich bin nicht ganz sicher. Ich denken es ist, weil der Aufruf von nextInt() nie da endet der InputMismatchException, geworfen wird, um den nächsten Aufruf von nextInt() verursacht (Nach den do-while Wiederholungen) zu denken, dass das Schreiben/Symbol Sie nur die, die Sie bearbeiten möchten, eingegeben ist, wiederholen die Ausnahme immer und immer wieder.

Um dies zu lösen, fügen Sie diese Zeile in Ihre catch Block:

if(operation.hasNext()) operation.next(); 

wird next() und vervollständigen den Prozess der Markierung den Buchstaben/Symbol eingegeben Sie wie bereits bearbeitet, wiederholen Diese rufen dann die do-while Schleife wie normal.

Verwandte Themen