2016-12-27 149 views
1

這是我在Java中如何在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"); 
     } 
    } 
} 
} 

代碼和我的代碼,以輸入以下部分有問題。這不是從用戶的任何輸入中跳過這部分。這段代碼有沒有問題?

 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

你能說出你在str1中獲得了什麼樣的價值嗎? – GurV

+0

閱讀[Yoda條件](https://en.wikipedia.org/wiki/Yoda_conditions) – Guy

+0

@GurwinderSingh它不會在str1中輸入任何內容。 – Mathur

回答

-1

你的問題是你在你的情況下,使用nextInt(),存儲,以便您的字符串是新線。所有你需要做的就是更換:

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"); 
    } 

由:

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"); 
    } 

您可以刪除以下那些2線還是沒有的好:

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

說明:input.nextLine();那我添加基本上捕獲新行字符時,你輸入或返回。接下來,您將不得不再次撥打input.nextLine()並將其分配給str1以捕獲您打算使用的字符串。 此外,您的程序中還有一個小記錄:如果用戶輸入「否」,程序仍將該值視爲「是」,因爲只有「小寫」不變,該值纔會更改爲false。解決方案是通過調用str1.toLowerCase()來將您收到的字符串轉換爲小寫字母。此外,您可能需要檢查明確的肯定答案,因爲用戶可能會鍵入狗,並且程序仍然認爲它是「是」。

+1

如果只是'if(str1.equalsIgnoreCase(「no」)){}'? –

+0

@YoungMillie雖然沒有任何特別的優勢,但效果相當好。相同的計算成本。但+1更多的建議。 – Ralph

+0

@YoungMillie不是。 toLowerCase仍然會將每個ASCII字符轉換爲lowerCase,而即使在編譯器級別,equalsIgnoreCase也會執行相同數量的比較。 - >編譯器設計課程完成。 – Ralph

3

問題是因爲你早些時候選擇了nextInt。用戶輸入一個數字和一個新的行字符。您選擇該號碼,並且新行字符保持緩衝。當您執行nextLine()時,它會讀取所指向的字符與下一個EOL之間的所有字符。它讀取空字符串,因爲它在\n之前的緩衝區中,然後另一個nextLine()需要程序等待輸入。

當您在String str = input.nextLine()後面放置斷點時,您會看到它實際上是空的String""

enter image description here

所以不是:

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(); 

你應該寫:

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

這是掃描儀的一個基本錯誤。應該在每一個很好的教程中解釋... – AxelH

+0

爲什麼不使用'input.next()'?我認爲他們正在尋找下一個完整的標記,而不是下一行。 – matt

+0

@matt也許......情況並非如此 – xenteros

相關問題