2016-12-27 4 views
1

Dies ist mein Code in JavaWie nehme ich String-Eingaben von der Konsole in Java?

import java.util.Scanner; 
class calc 
{ 
public static void main(String[] args) 
{ 
    boolean go=true; 
    Scanner input=new Scanner(System.in); 
    while(go) 
    { 
     int num1; 
     int num2; 
     int total; 
     int choice; 

     System.out.println("\nHi This is Console type Calculator"); 
     System.out.println("1. Addition"); 
     System.out.println("2. Substraction"); 
     System.out.println("3. Multiply"); 
     System.out.println("4. Divisoin"); 
     System.out.print("Enter Your Choice : "); 
     choice=input.nextInt(); 

     switch(choice) 
     { 

      case 1: 
       System.out.println("Enter First Number"); 
       num1=input.nextInt(); 
       System.out.println("Enter Second Number"); 
       num2=input.nextInt(); 
       total=num1+num2; 
       System.out.println("Addition of "+num1+" and "+num2+" are "+total); 
       break; 
      case 2: 
       System.out.println("Enter First Number"); 
       num1=input.nextInt(); 
       System.out.println("Enter Second Number"); 
       num2=input.nextInt(); 
       total=num1-num2; 
       System.out.println("Substraction of "+num1+" and "+num2+" are "+total); 
       break; 
      case 3: 
       System.out.println("Enter First Number"); 
       num1=input.nextInt(); 
       System.out.println("Enter Second Number"); 
       num2=input.nextInt(); 
       total=num1*num2; 
       System.out.println("Multiplication of "+num1+" and "+num2+" are "+total); 
       break; 
      case 4: 
       System.out.println("Enter First Number"); 
       num1=input.nextInt(); 
       System.out.println("Enter Second Number"); 
       num2=input.nextInt(); 
       total=num1/num2; 
       System.out.println("Divistion of "+num1+" and "+num2+" are "+total); 
       break; 
      default: 
       System.out.println("Please Choose right option...Try again"); 
       break; 
     } 

     System.out.println("Do You Want more Calculation...Yes/No"); 
     String str=input.nextLine(); 
     System.out.println("Do You Want more Calculation...Yes/No"); 
     String str1=input.nextLine(); 

     if("no".equals(str1)) 
     { 
      go=false; 
      System.out.println("Thanks For using...Bye"); 
     } 
    } 
} 
} 

Und ich habe ein Problem in dem folgenden Teil des Codes als Eingabe nehmen. Dies nimmt keine Eingabe von Benutzer, diesen Teil überspringen. Gibt es ein Problem in diesem Code?

 System.out.println("Do You Want more Calculation...Yes/No"); 
     String str1=input.nextLine(); 

     if("no".equals(str1)) 
     { 
      go=false; 
      System.out.println("Thanks For using...Bye"); 
     } 
+0

Können Sie sagen, welchen Wert Sie in str1 erhalten? – GurV

+0

Lies über [Yoda Bedingungen] (https://en.wikipedia.org/wiki/Yoda_conditions) – Guy

+0

@GurwinderSingh Es nimmt keine Eingabe in str1. – Mathur

Antwort

-1

Ihr Problem ist, dass Sie nextInt() in Ihren Fällen verwendet haben, so gespeichert Zeichenfolge ist die neue Linie . Alles, was Sie tun müssen, ist ersetzen:

System.out.println("Do You Want more Calculation...Yes/No"); 
    String str1=input.nextLine(); 

    if("no".equals(str1)) 
    { 
     go=false; 
     System.out.println("Thanks For using...Bye"); 
    } 

von:

System.out.println("Do You Want more Calculation...Yes/No"); 
    input.nextLine(); // this is what I added 
    String str1=input.nextLine(); 

    if("no".equals(str1)) 
    { 
     go=false; 
     System.out.println("Thanks For using...Bye"); 
    } 

Sie folgendes entfernen, da diese 2 Zeilen keinen nützlichen Zweck dienen:

System.out.println("Do You Want more Calculation...Yes/No"); 
    String str=input.nextLine(); 

Erläuterung: die input.nextLine();, dass Ich fügte hinzu, fängt im Grunde die neue Zeile Zeichen, wenn Sie Enter oder Return drücken. Als nächstes müssen Sie erneut input.nextLine() aufrufen und es str1 zuweisen, um die Zeichenfolge einzufangen, die Sie verwenden wollten. Auch eine kleine Notiz auf Ihrem Programm: Wenn ein Benutzer Nein eingeben sollte, wird das Programm weiterhin den Wert als Ja betrachten, da es sich ändern wird, gehen Sie zu false nur dann, wenn NEIN in Kleinbuchstaben ist. Eine Lösung dazu wäre, die Zeichenfolge, die Sie erhalten, in Kleinbuchstaben umzuwandeln, indem Sie str1.toLowerCase() aufrufen. Vielleicht möchten Sie auch nach einer expliziten Ja-Antwort suchen, da ein Benutzer möglicherweise Hund eingibt und Ihr Programm dies immer noch als Ja ansieht.

+1

Was ist mit nur 'if (str1.equalsIgnoreCase (" no ")) {}'? –

+0

@YoungMillie funktioniert aber ohne besondere Vorteile gleich gut. Gleiche Berechnungskosten. Aber +1 für weitere Vorschläge. – Ralph

+0

@YoungMillie Nicht wirklich. toLowerCase konvertiert weiterhin jedes ASCII-Zeichen in lowCase, während equalsIgnoreCase genau die gleiche Anzahl von Vergleichen durchführt, auch auf der Compiler-Ebene. -> Compiler Design Kurs abgeschlossen. – Ralph

3

Das Problem ist, aufgrund der Tatsache, dass Sie nextInt früher holen. Der Benutzer gibt eine Nummer und ein neues Zeilenzeichen ein. Sie wählen die Nummer und das neue Zeilenzeichen wird gepuffert. Wenn Sie nextLine() ausführen, liest es alle Zeichen zwischen dem, was angezeigt wird, und dem nächsten EOL. Es liest den leeren String, wie er sich im Puffer vor \n befindet, und danach fordert ein anderes nextLine() das Programm auf die Eingabe zu warten.

Wenn Sie einen Haltepunkt nach String str = input.nextLine() setzen, sehen Sie, dass es tatsächlich leer String ist: "".

enter image description here

Also statt:

System.out.println("Do You Want more Calculation...Yes/No"); 
    String str=input.nextLine(); 
    System.out.println("Do You Want more Calculation...Yes/No"); 
    String str1=input.nextLine(); 

sollten Sie schreiben:

input.nextLine(); 
    System.out.println("Do You Want more Calculation...Yes/No"); 
    String str1=input.nextLine(); 
+2

Das ist ein grundlegender Fehler mit dem Scanner. Sollte in jedem guten Tutorial erklärt werden ... – AxelH

+0

Warum würdest du nicht 'input.next()' benutzen? Ich denke, sie suchen nach dem nächsten vollständigen Token, nicht nach der nächsten Zeile. – matt

+0

@matt vielleicht ...Es ist nicht der Fall – xenteros

Verwandte Themen