2015-03-13 53 views
0

calculator()已經運行後,我的程序暫停......除非輸入一個輸入來取消暫停程序。然後繼續運行並打印出來。但是,我之前輸入的用於取消暫停程序的輸入存儲在answer中。請閱讀我在代碼中的評論以獲得更好的理解。如果你仍然不明白,隨時可以複製代碼,看看我在說什麼。爲什麼我的Java計算器在循環中暫停?

public static void main(String[] args) { 
    boolean repeat = true; 
     while (repeat){ 
      calculator(); //-Program pauses after this has ran. 
      System.out.println("Do you wish to repeat(y/n)?"); // This does not appear unless I enter an input. 
      String answer = userInput.next(); //The input that I entered earlier to unpause the program gets stored into answer. 

       if (answer.equalsIgnoreCase("y")){ 
        repeat = true; 
       } else { repeat = false;}}} //Program terminates here because the input that I used to unpause the program isn't "y". 

全部下面的代碼:

package calculatorAttempt; 
import java.util.Scanner; 

class CalculatorV2 { 
    static Scanner userInput = new Scanner(System.in); 

public static void calculator(){ 

    System.out.print(":"); 

    if (userInput.hasNextInt()){ 
     int num1 = userInput.nextInt(); 
     System.out.print(":"); 
     String inString = userInput.next(); 
     System.out.print(":"); 
     int num2 = userInput.nextInt(); 
     System.out.print("="); 

      if (inString.equals("+")){ 
       System.out.print(num1+num2);} 

      if (inString.equals("-")){ 
       System.out.print(num1-num2);} 

      if (inString.equals("*")||(inString.equalsIgnoreCase("x"))){ 
       System.out.print(num1+num2);} 

      if (inString.equals("/")){ 
       float intTofloat = (float)num1/num2; 
       System.out.println(intTofloat);} }//If Integer 


    if (userInput.hasNextFloat()){ 
     float num1 = userInput.nextFloat(); 
     System.out.print(":"); 
     String inString = userInput.next(); 
     System.out.print(":"); 
     float num2 = userInput.nextFloat(); 
     System.out.print("="); 

      if (inString.equals("+")){ 
       System.out.print(num1+num2);} 

      if (inString.equals("-")){ 
       System.out.print(num1-num2);} 

      if (inString.equals("*")||(inString.equalsIgnoreCase("x"))){ 
       System.out.print(num1*num2);} 

      if (inString.equals("/")){ 
       System.out.print(num1/num2);} }//If Float 
}//Public Void Calculator 

public static void main(String[] args) { 
    boolean repeat = true; 
     while (repeat){ 
      calculator(); 
      System.out.println("Do you wish to repeat(y/n)?"); 
      String answer = userInput.next(); 


       if (answer.equalsIgnoreCase("y")){ 
        repeat = true; 
       } else { repeat = false;}} 
    }//Main 
}//Class 

我初學者,請多多包涵:^)。謝謝。

+1

我正在調試你的代碼,還沒有完成它。我認爲這是與userInput.hasNextFloat() – rsb2097 2015-03-13 12:39:52

+0

也:把這些 如果(x == a){} if(x == b){}選項變成:if(x == a){} else if (x == b){} 它將使您的代碼更易於調試。這可能是因爲您沒有正確計算使用的next或hasNext調用的行爲。 如果在計算器的末尾添加打印語句,是否在暫停之前顯示? – Stultuske 2015-03-13 12:41:58

回答

3

這是因爲這行:

if (userInput.hasNextFloat()){ 

hasNext...()方法Scanner阻擋方法。如果在掃描儀中沒有空白以外的輸入,它們將被阻止,等待輸入。一旦輸入了真實的東西(不是空格或換行符),他們就會檢查它是否是一個浮點數,一個整數或其他值,然後返回一個真/假回覆給你。

完成整數計算後,程序會調用hasNextFloat(),因此它會阻塞,等待輸入內容。如果這不是浮動,它將返回false,並且if將不起作用。

您可以嘗試一點點,看看:

  • 如果你運行你的程序,並用浮動(比如,17.2),程序會顯示您的Do you wish to repeat?問題,它計算的結果之後開始。
  • 如果您運行程序並以int開頭,然後在得到結果後輸入一個浮點數,它將打印要求您輸入float操作符的:

所以基本上,這不應該是if。它應該是一個else if結構。

+0

哇哦。你真的知道何時使用if和else if語句。 – jazzboy 2015-03-13 12:52:25

-1

您必須使用hasNext()而不是hasNextInt()並刪除if(hasNextFloat())部件。並使用Number類,因爲它同時接受整型和浮點:

if (userInput.hasNext()) { 
    Number num1 = userInput.nextByte(); 
    System.out.print(":"); 
    String inString = userInput.next(); 
    System.out.print(":"); 
    Number num2 = userInput.nextByte(); 
    System.out.print("="); 

    switch (inString) { 
     case "+": 
      System.out.print(num1.doubleValue() + num2.doubleValue()); 
      break; 

     case "-": 
      System.out.print(num1.doubleValue() - num2.doubleValue()); 
      break; 

     case "*": 
     case "x": 
     case "X": 
      System.out.print(num1.doubleValue() * num2.doubleValue()); 
      break; 

     case "/": 
      double intTofloat = num1.doubleValue()/num2.doubleValue(); 
      System.out.println(intTofloat); 
      break; 

     default: 
      System.out.println(INVALID OPERATOR!); 
      break; 
    } 
} 
0

只需使用else if而不是if檢查userInput.hasNextFloat()。

您的代碼示例看起來像。

if (userInput.hasNextInt()){ 
     int num1 = userInput.nextInt(); 
     .... 
     .... 
     .... 

    } else if (userInput.hasNextFloat()){ 
     float num1 = userInput.nextFloat(); 
     .... 
     .... 
     ... 
    }