2017-07-27 3 views
0

Das Programm fragt nach der Benutzereingabe für die doppelte Nummer 1 und doppelte Nummer 2 und wenn es eine Ausnahme gibt, möchte ich es erneut für die Eingabe von Nummer 1 und Nummer 2versuchen fangen in einer do while-Schleife

fragen
public static void main (String[] args) { 
    Scanner sc = new Scanner(System.in); 
    double num1, num2; 
    int error = 0; 
    int text; 
    System.out.print("Enter 4 "); 
     text = sc.nextInt(); 

    do{ 

     try{ 

    if(text == 4){ 
      System.out.print("Enter number 1: "); 
      num1 = sc.nextDouble(); 
      System.out.print("Enter number 2: "); 
      num2 = sc.nextDouble(); 
      double quotient = num1/num2; 
      System.out.println("The Quotient of "+num1 + "/" +num2+ " = "+quotient); 
      } 
     }catch(Exception ex){ 
      System.out.println("You've entered wrong input"); 
       error = 1; 
     }         

      }while(error == 1); 
} 

dann, wenn ich den Code versuchen, wenn es die Ausnahmen von inputing Zeichenfolge im num1 oder num fangen 2 ich diese Endlosschleife habe: Enter number 1: You've entered wrong input Enter number 1: You've entered wrong input Enter number 1: You've entered wrong input Enter number 1: You've entered wrong input Enter number 1: You've entered wrong input

+3

Bitte geben Sie ein [mcve] (beachten Sie das "vollständige" Bit). – assylias

+0

Wo erhalten Sie das Doppel? – Shirkam

+0

Ihr Code würde davon profitieren, dass Sie eine separate Methode deklarieren und (wieder-) verwenden, die Eingaben vom Benutzer erhält, bis der Benutzer gültige Daten eingibt. – Bohemian

Antwort

3

Sie benötigen die error Variable innerhalb der Schleife zurückgesetzt

do { 
    error = 0; 
    //... 
} while(error == 1); 
+0

immer noch die Schleife – Pon

+0

@Pon Bitte schreiben Sie den Code, den Sie versucht haben. – Guy

+0

@Pon Sie müssen 'error = 0;' in die 'do while' Schleife einfügen. – Guy

0

Sie wollen wahrscheinlich testen, ob kein Fehler vorhanden ist:

}while(error != 1); 

oder

}while(error == 0); 
0

Sie werden ein Verfahren zur Eingabe benötigen, die sich selbst aufruft, wenn die Eingabe ungültig ist.

double getInput(Scanner sc) { 
    try { 
     double num = sc.nextDouble(); 
     return num; 
    } catch(Exception ex) { 
     System.out.println("You've entered wrong input"); 
     return getInput(sc); 
    }  
} 

Und rufen Sie diese Methode zweimal in Ihrer anderen Methode.

0

kann es hässlich aussehen, aber hier ist ein Weg, um es

do 
    { 
    if(...) 
    { 

     boolean successReading = false; 
     while(!successReading) 
     { 
     try 
     { 
      System.out.print("Enter number 1: "); 
      num1 = sc.nextDouble(); 
      System.out.print("Enter number 2: "); 
      num2 = sc.nextDouble(); 

      successReading = true; 

      double product = num1*num2; 
     } 
     catch(Exception e) 
     { 
      successReading = false; 
     } 
     } 

    } 
    }while(...) 
+0

hey, es ist eine Frage, aber was ist in letzter Zeit? – Pon

+0

Ihre Bedingung, um Ihre 'while'-Schleife zu halten.Aber lass mich dir eine Frage stellen, warum schreibst du das? if (text == 4) {' – Ali

1

Sein in C# zu tun, aber relativ ähnlich :)

public class Program 
{ 
    private static double ReadUserInput (string message) 
    { 
    // This is a double 
    // The '?' makes it nullable which is easier to work with 
    double? input = null; 

    do 
    { 
     // Write message out 
     Console.Write(message); 
     // Read answer 
     var inputString = Console.ReadLine(); 
     // Temp variable for the number 
     double outputNumber = 0; 
     // Try parse the number 
     if (double.TryParse(inputString, out outputNumber)) 
     { 
     // The number was parsable as a double so lets set the input variable 
     input = outputNumber; 
     } 
     else 
     { 
     // Tell the user the number was invalid 
     Console.WriteLine("Sorry bud, but '" + inputString + "' is not a valid double"); 
     } 
    } 
    while (input == null); // Keep running until the input variable is actually set by the above 

    // Return the output 
    return (double)input; 
    } 

    public static void Main() 
    { 
    // Read a number 
    var num1 = ReadUserInput("Enter number 1:"); 
    // Read another number 
    var num2 = ReadUserInput("Enter number 2:"); 
    // Show the calculation 
    Console.WriteLine("Answer: " + (num1*num2)); 
    } 
} 

Demo

Und für den eigentlichen Code (in JAVA):

public class JavaFiddle 
{ 
    public static void main (String[] args) 
    { 
    // Read a number 
    Double num1 = ReadUserInput("Enter number 1:"); 
    // Read another number 
    Double num2 = ReadUserInput("Enter number 2:"); 
    // Show the calculation 
    System.out.println("Answer: " + (num1*num2)); 
    } 

    public static Double ReadUserInput (String message) 
    { 
    java.util.Scanner inputScanner = new java.util.Scanner(System.in); 
    Double input = null; 

    do 
    { 
     // Write message out 
     System.out.println(message); 
     // Read answer 
     String inputString = inputScanner.nextLine(); 
     try 
     { 
     // Try parse the number 
     input = Double.parseDouble(inputString); 
     } 
     catch (NumberFormatException e) 
     { 
     // Tell the user the number was invalid 
     System.out.println("Sorry bud, but '" + inputString + "' is not a valid double"); 
     } 
    } 
    while (input == null); // Keep running until the input variable is actually set by the above 

    // Return the output 
    return input; 
    } 
} 
+0

Dort ist kein' C# '-Tag in Frage. Warum entscheidest du dich für eine nicht hilfreiche Antwort? – talex

+0

es sieht aus wie eine gute Lösung, aber Sie sollten es in 'java' schreiben – Ali

+0

Seine mehr von dem Prozess und wie man dies in OOP-Stil schreiben und die Art, wie der Prozess läuft, war, wo ich mit der Antwort statt mit dem Code ging . Es gibt nicht viel Unterschied zwischen JAVA und C#, aber da ich JAVA seit Jahren nicht mehr gemacht habe, poste ich lieber Arbeitscode als etwas, das funktionieren könnte oder wenn nicht, jemanden verwirren - was schlimmer ist. Ich werde in JAVA umschreiben mehr im Einklang mit dem Q zu sein :) –

1

Es ist nicht erforderlich, die Ausnahmebehandlung zu verwenden. Verwenden Sie einfach die Methode Scanner.hasNextDouble(), um herauszufinden, ob die tatsächliche Benutzereingabe doppelt ist, andernfalls fahren Sie mit dem Zyklus fort.

package com.company; 

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     double num1, num2; 
     num1 = readDouble(1, sc); 
     num2 = readDouble(2, sc); 
     double quotient = num1/num2; 
     System.out.println("The Quotient of " + num1 + "/" + num2 + " = " + quotient); 
    } 

    private static double readDouble(int i, Scanner sc) { 
     while (true) { 
      System.out.print("Enter number " + i + ": "); 
      if (!sc.hasNextDouble()) { 
       System.out.println("You've entered wrong input"); 
       sc.next(); 
       continue; 
      } 
      break; 
     } 
     return sc.nextDouble(); 
    } 
} 
+0

Entschuldigung dafür, es nicht in den Code, aber es ist ein sonst noch, wenn es da ist, weil ich möchte, dass der Benutzer definiert, welche Methode er/sie tun möchte. Ich habe versucht, den Code, den Sie kommentiert, indem Sie die Boolean fortsetzen und brechen es keine Fehler, aber die Schleife startet nicht, wenn ich Zeichenfolge anstelle von Doppel – Pon

+0

Ich vermisste 'sc.next();' –

+0

Das behebt es. – Pon

0

Sie müssen sc.next(); innerhalb catch Block hinzuzufügen.

nextDouble Methode löscht Puffer nicht im Ausnahmefall. Wenn Sie das nächste Mal aufrufen, erhalten Sie denselben Fehler, weil die alte Eingabe immer noch im Puffer ist.

Auch müssen Sie Ihre error Flag am Anfang der Schleife zurücksetzen.

+0

hey es scheint jetzt zu funktionieren danke: D – Pon

+0

Dann markieren Sie es als akzeptiert. Es hilft, die richtige Antwort für diejenigen zu finden, die dasselbe Problem haben wie Sie. – talex

Verwandte Themen