2013-06-12 62 views
0

以及我試圖創建一個Java計算器,但每當我嘗試輸入一個數字時,它會請求兩次,不僅如此,但我爲第一個數字輸入的數字不起作用,只會給我一個0+被輸入到2號)任何人都在意幫助我嗎?並解釋我需要做什麼來解決這個問題?爲什麼我必須輸入兩次數字?爲什麼第一個數字只給0?

package Calc1; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Scanner; 
public class Calc1 { 
public static void main(String[] args) throws IOException { 
    // TODO code application logic here 
    Boolean test = true; 
    Scanner in = new Scanner(System.in); 
    Scanner in2 = new Scanner(System.in); 
    int a = 0; 
    int b = 0; 
    String sum; 

    System.out.println("Please enter the first number you wish to calculate."); 
    if(in.hasNextInt()) { 
     b = in.nextInt(); 
    } 
    while (!in.hasNextInt()) { 
     System.out.println("Invalid number. Please enter digits only."); 
     in.next();//Go to next 
    } 
    //stops infinite loop by requesting Scanner try again 


    System.out.println("Please enter the second number you wish to calculate."); 
    if(in2.hasNextInt()) { 
     b = in2.nextInt(); 
    } 
    while (!in2.hasNextInt()) { 
     System.out.println("Invalid number. Please enter digits only."); 
     in2.next();//Go to next 
    } 
    //stops infinite loop by requesting Scanner try again 

    BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("please enter one of the following operators + -/*"); 
    sum = br2.readLine(); 
    if ("+".equals(sum)) 
    { 
     int c = a + b; 
     System.out.println(a + "+" + b + "=" + c); 
    } 
    if ("-".equals(sum)) 
    { 
     int c = a - b; 
     System.out.println(a + "-" + b + "=" + c); 
    } 
    if ("/".equals(sum)) 
    { 
     int c = a/b; 
     System.out.println(a + "/" + b + "=" + c); 
    } 
    if("*".equals(sum)) 
    { 
     int c = a * b; 
     System.out.println(a + "*" + b + "=" + c); 
    } 
} 
} 

我的問題是怎麼這樣,我做錯了什麼?和你我怎麼解決它,這樣我只需要輸入每個數字一次(和兩個工作而不是給0)

+0

不要創建兩個掃描儀,使用相同的所有操作 – SJuan76

+0

我用了兩個,因爲我在java的新認爲我需要兩個,現在我知道,否則,感謝您的幫助。 – Doomking517

回答

0

你得到你的號碼雙請求的理由是,Scanner.hasNextInt正在檢查是否有另一個INT,但輸入是空的,所以它會卡在那裏,直到有其他東西。 所以,發生的是,當你輸入第一個數字時,它會告訴你,你有另一個int,之後,你輸入的數字。

第二個問題是您將第一個數字請求放在第二個數字上。

實現另一種簡單的方式是:

System.out.println("Please enter the first number you wish to calculate."); 
boolean ok = false; 
while (!ok){ 
    try { 
     a = in.nextInt(); 
     ok = true; 
    } catch (Exception e){ 
     System.out.println("Invalid number."); 
    } 
} 
+0

謝謝,這幫助了我很多程序,它向我展示了1.一種可供選擇的(並且更有效的)方法來使得我需要的捕獲物,其次你對我做錯了什麼的解釋很好,並且幫助了一個巨大的處理我的問題。 – Doomking517

1
  • 你似乎並不a是指派任何所以它始終爲零。

  • Scanner.next()Scanner.nextInt()都轉到下一個 令牌。你不需要這條線:

    in.next();//Go to next 
    

    因爲你沒有使用它的返回值,它只是吞下一行輸入。

  • 如果他們緩衝輸入,使用兩個掃描儀也可以搞砸了。使用 相同的掃描儀,直到完成。

+0

我用兩個掃描儀認爲這是必要的(這是我用java編寫的第一個程序),所以我認爲它是需要的,但是這不是我的感謝您的建議。 – Doomking517

0

爲零,因爲你把兩個int b中

System.out.println("Please enter the first number you wish to calculate."); 
     if(in.hasNextInt()) { 
     a = in.nextInt(); 
     } 
     while (!in.hasNextInt()) { 
      System.out.println("Invalid number. Please enter digits only."); 

} 
     //stops infinite loop by requesting Scanner try again 


     System.out.println("Please enter the second number you wish to calculate."); 
     if(in.hasNextInt()) { 
     b = in.nextInt(); 
     } 
+1

請在您的答案中格式化代碼。 –

+0

我已經複製相同的代碼,並將**添加到邏輯錯誤行,他將兩個int放在同一個變量b中,但是他必須使用變量a來放置其中一個輸入,因爲它被初始化爲零並保持爲零 –

+1

你答案中的代碼遍佈全球。這是不可讀的。粗體在代碼塊中不起作用。 –

0

我糾正你的you.There計算器程序是小問題的代碼: 1.有人缺席兩場else語句 2.你是未設置「a」變量。

這裏是校正代碼:

公共靜態無效主要(字符串ARGS [])拋出IOException異常{ // TODO代碼應用這裏邏輯 布爾測試= TRUE; Scanner in = new Scanner(System.in); // int a = 0; int b = 0; 絃樂總和;

System.out.println("Please enter the first number you wish to calculate."); 
    if(in.hasNextInt()) { 
     a = in.nextInt(); 
    }else{ 
    while (!in.hasNextInt()) { 
     System.out.println("Invalid number. Please enter digits only."); 
     in.next();//Go to next 
    } 
    } 
    //stops infinite loop by requesting Scanner try again 


    Scanner in2 = new Scanner(System.in); 
    System.out.println("Please enter the second number you wish to calculate."); 
    if(in2.hasNextInt()) { 
     b = in2.nextInt(); 
    }else{ 
    while (!in2.hasNextInt()) { 
     System.out.println("Invalid number. Please enter digits only."); 
     in2.next();//Go to next 
    } 
    } 
    //stops infinite loop by requesting Scanner try again 

    BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("please enter one of the following operators + -/*"); 
    sum = br2.readLine(); 
    if ("+".equals(sum)) 
    { 
     int c = a + b; 
     System.out.println(a + "+" + b + "=" + c); 
    } 
    if ("-".equals(sum)) 
    { 
     int c = a - b; 
     System.out.println(a + "-" + b + "=" + c); 
    } 
    if ("/".equals(sum)) 
    { 
     int c = a/b; 
     System.out.println(a + "/" + b + "=" + c); 
    } 
    if("*".equals(sum)) 
    { 
     int c = a * b; 
     System.out.println(a + "*" + b + "=" + c); 
    } 
} 
相關問題