2016-02-09 68 views
1

您好我似乎无法让我的while循环在我输入字符串“quit”时终止代码。任何帮助,将不胜感激。键入“退出”时,Java循环不会退出

package CalculatorProg; 

import java.util.Scanner; 

public class MainDriver { 

    public static void main(String[] args){ 

     BinaryExpression operation = new BinaryExpression(); 

     @SuppressWarnings("resource") 
     Scanner userinput = new Scanner(System.in); 


     while(true){ 


      String calc; 
      String num1; 
      String num2; 

      num1 = userinput.next(); 
      calc = userinput.next(); 
      num2 = userinput.next(); 

      String[] input = new String[5]; 
      input[0] = num1; 
      input[1] = " "; 
      input[2] = calc; 
      input[3] = " "; 
      input[4] = num2; 


      if(calc.equals("+")){ 
       System.out.print(num1); 
       System.out.print(" "); 
       System.out.print(calc); 
       System.out.print(" "); 
       System.out.print(num2); 
       System.out.print(" "); 
       System.out.print("="); 
       System.out.print(" "); 
       int x, y; 
       x = Integer.parseInt(num1); 
       y = Integer.parseInt(num2); 

       System.out.println(operation.Add(x, y)); 
      }  
      else if(calc.equals("-")){ 
       System.out.print(num1); 
       System.out.print(" "); 
       System.out.print(calc); 
       System.out.print(" "); 
       System.out.print(num2); 
       System.out.print(" "); 
       System.out.print("="); 
       System.out.print(" "); 
       int x, y; 
       x = Integer.parseInt(num1); 
       y = Integer.parseInt(num2); 
       System.out.println(operation.Subtract(x, y)); 
      } 
      else if(calc.equals("*")){ 
       System.out.print(num1); 
       System.out.print(" "); 
       System.out.print(calc); 
       System.out.print(" "); 
       System.out.print(num2); 
       System.out.print(" "); 
       System.out.print("="); 
       System.out.print(" "); 
       int x, y; 
       x = Integer.parseInt(num1); 
       y = Integer.parseInt(num2); 
       System.out.println(operation.Multiply(x, y)); 
      } 
      else if(calc.equals("/")){ 
       System.out.print(num1); 
       System.out.print(" "); 
       System.out.print(calc); 
       System.out.print(" "); 
       System.out.print(num2); 
       System.out.print(" "); 
       System.out.print("="); 
       System.out.print(" "); 
       int x, y; 
       x = Integer.parseInt(num1); 
       y = Integer.parseInt(num2); 
       System.out.println(operation.Divide(x, y)); 
      } 
      else{ 
       System.out.println("The operation is not valid."); 
       } 
      if(input[0].equalsIgnoreCase("quit")){ 
        break; 
      } 
     } 
     System.exit(0); 
    } 
} 
+1

我想你一定是 '操作是无效的'。把你的if条件退出,否则如果。如果你使用后,如果它测试的第一个,然后来到第二个如果。 –

+0

这个'input'数组的目的是什么?只是为了让事情更复杂? 'num1 = userinput.next();'后面的' – Holger

+0

; 'use use if(num1.equalsIgnoreCase(“quit”)){break35; }' – laune

回答

0

您应该首先在自己的条件下验证输入。

例子:

package CalculatorProg; 

import java.util.Scanner; 

public class MainDriver { 

    public static void main(String[] args) { 

     BinaryExpression operation = new BinaryExpression(); 

     @SuppressWarnings("resource") 
     Scanner userinput = new Scanner(System.in); 


     while (true) { 


      String calc; 
      String num1; 
      String num2; 

      num1 = userinput.next(); 
      calc = userinput.next(); 
      num2 = userinput.next(); 

      String[] input = new String[5]; 
      input[0] = num1; 
      input[1] = " "; 
      input[2] = calc; 
      input[3] = " "; 
      input[4] = num2; 

      if (!input[0].equalsIgnoreCase("quit")) { 
       if (calc.equals("+")) { 
        System.out.print(num1); 
        System.out.print(" "); 
        System.out.print(calc); 
        System.out.print(" "); 
        System.out.print(num2); 
        System.out.print(" "); 
        System.out.print("="); 
        System.out.print(" "); 
        int x, y; 
        x = Integer.parseInt(num1); 
        y = Integer.parseInt(num2); 

        System.out.println(operation.Add(x, y)); 
       } else if (calc.equals("-")) { 
        System.out.print(num1); 
        System.out.print(" "); 
        System.out.print(calc); 
        System.out.print(" "); 
        System.out.print(num2); 
        System.out.print(" "); 
        System.out.print("="); 
        System.out.print(" "); 
        int x, y; 
        x = Integer.parseInt(num1); 
        y = Integer.parseInt(num2); 
        System.out.println(operation.Subtract(x, y)); 
       } else if (calc.equals("*")) { 
        System.out.print(num1); 
        System.out.print(" "); 
        System.out.print(calc); 
        System.out.print(" "); 
        System.out.print(num2); 
        System.out.print(" "); 
        System.out.print("="); 
        System.out.print(" "); 
        int x, y; 
        x = Integer.parseInt(num1); 
        y = Integer.parseInt(num2); 
        System.out.println(operation.Multiply(x, y)); 
       } else if (calc.equals("/")) { 
        System.out.print(num1); 
        System.out.print(" "); 
        System.out.print(calc); 
        System.out.print(" "); 
        System.out.print(num2); 
        System.out.print(" "); 
        System.out.print("="); 
        System.out.print(" "); 
        int x, y; 
        x = Integer.parseInt(num1); 
        y = Integer.parseInt(num2); 
        System.out.println(operation.Divide(x, y)); 
       } else { 
        System.out.println("The operation is not valid."); 
       } 
      } else { 
       break; 
      } 
     } 
     System.exit(0); 
    } 
} 
0

尝试检查之前,任何其他条件的“退出”:

package CalculatorProg; 

import java.util.Scanner; 

public class MainDriver { 

    public static void main(String[] args){ 

     BinaryExpression operation = new BinaryExpression(); 

     @SuppressWarnings("resource") 
     Scanner userinput = new Scanner(System.in); 


     while(true){ 


      String calc; 
      String num1; 
      String num2; 

      num1 = userinput.next(); 
      if(num1.equalsIgnoreCase("quit")){ 
        break; 
      } 
      calc = userinput.next(); 
      num2 = userinput.next(); 

      String[] input = new String[5]; 
      input[0] = num1; 
      input[1] = " "; 
      input[2] = calc; 
      input[3] = " "; 
      input[4] = num2; 



      if(calc.equals("+")){ 
       System.out.print(num1); 
       System.out.print(" "); 
       System.out.print(calc); 
       System.out.print(" "); 
       System.out.print(num2); 
       System.out.print(" "); 
       System.out.print("="); 
       System.out.print(" "); 
       int x, y; 
       x = Integer.parseInt(num1); 
       y = Integer.parseInt(num2); 

       System.out.println(operation.Add(x, y)); 
      }  
      else if(calc.equals("-")){ 
       System.out.print(num1); 
       System.out.print(" "); 
       System.out.print(calc); 
       System.out.print(" "); 
       System.out.print(num2); 
       System.out.print(" "); 
       System.out.print("="); 
       System.out.print(" "); 
       int x, y; 
       x = Integer.parseInt(num1); 
       y = Integer.parseInt(num2); 
       System.out.println(operation.Subtract(x, y)); 
      } 
      else if(calc.equals("*")){ 
       System.out.print(num1); 
       System.out.print(" "); 
       System.out.print(calc); 
       System.out.print(" "); 
       System.out.print(num2); 
       System.out.print(" "); 
       System.out.print("="); 
       System.out.print(" "); 
       int x, y; 
       x = Integer.parseInt(num1); 
       y = Integer.parseInt(num2); 
       System.out.println(operation.Multiply(x, y)); 
      } 
      else if(calc.equals("/")){ 
       System.out.print(num1); 
       System.out.print(" "); 
       System.out.print(calc); 
       System.out.print(" "); 
       System.out.print(num2); 
       System.out.print(" "); 
       System.out.print("="); 
       System.out.print(" "); 
       int x, y; 
       x = Integer.parseInt(num1); 
       y = Integer.parseInt(num2); 
       System.out.println(operation.Divide(x, y)); 
      } 
      else{ 
       System.out.println("The operation is not valid."); 
       } 
     } 
     System.exit(0); 
    } 
} 

的问题可能是,它试图解析“跳槽”到整数,这将导致错误,永远不会达到退出条件。

或者它可能是代码正在等待在输入“计算值= userinput.next();”,但我不知道,如果你试图进入下一两个输入

1

代码正在等待在calc = userinput.next()的用户输入上;

public boolean hasNext() 如果此扫描器在其输入中有另一个标记,则返回true。此方法可能会在等待输入进行扫描时阻塞。扫描仪不会超过任何输入。

+0

当输入源是'System.in'时,调用'Scanner :: hasNext'没有太大意义;使用'Scanner'解析文件或字符串时,该方法更加有用 – flakes

0

代码可能卡在第二个next()调用。尽量只使用到nextLine()单个呼叫和呼叫String::split

String input = userinput.nextLine(); // Get an entire line 

if (input.equalsIgnoreCase("quit")){ // Check the exit first 
    break; 
} 
// If it hasn't exited assume that its an equation 

String[] inputSplit = input.split(); // Split the input by spaces 
String calc inputSplit[1]; 
String num1 inputSplit[0]; 
String num2 inputSplit[2]; 
0

我希望它会适合你。当程序运行时,我会向用户提供一些帮助信息。你可以试试看! :d

package CalculatorProg; 

import java.util.Scanner; 

public class MainDriver { 

public static void main(String[] args){ 

    BinaryExpression operation = new BinaryExpression(); 

    @SuppressWarnings("resource") 
    Scanner userinput = new Scanner(System.in); 


    while(true){ 


     String calc; 
     String num1; 
     String num2; 

     System.out.print("Number 1 (if quit then program exits) ="); 
     num1 = userinput.next(); 
     if(num1.equalsIgnoreCase("quit")) { 
      System.out.println("program quit"); 
      break; 
     } 
     System.out.print("Operator ="); 
     calc = userinput.next(); 
     System.out.print("Number 2 ="); 
     num2 = userinput.next(); 

     String[] input = new String[5]; 
     input[0] = num1; 
     input[1] = " "; 
     input[2] = calc; 
     input[3] = " "; 
     input[4] = num2; 


     if(calc.equals("+")){ 

      int x, y; 
      x = Integer.parseInt(num1); 
      y = Integer.parseInt(num2); 
      System.out.println(num1 + " " + calc + " " + num2 + " " + "=" + " " + operation.Add(x,y)); 
      //System.out.println(num1 + " " + calc + " " + num2 + " " + "=" + " " + (x+y)); 
     }  
     else if(calc.equals("-")){ 
      int x, y; 
      x = Integer.parseInt(num1); 
      y = Integer.parseInt(num2); 
      System.out.println(num1 + " " + calc + " " + num2 + " " + "=" + " " + operation.Subtract(x, y)); 
      //System.out.println(num1 + " " + calc + " " + num2 + " " + "=" + " " + (x-y)); 
     } 
     else if(calc.equals("*")){ 
      int x, y; 
      x = Integer.parseInt(num1); 
      y = Integer.parseInt(num2); 
      System.out.println(num1 + " " + calc + " " + num2 + " " + "=" + " " + operation.Multiply(x, y)); 
      //System.out.println(num1 + " " + calc + " " + num2 + " " + "=" + " " + (x*y)); 
     } 
     else if(calc.equals("/")){ 
      int x, y; 
      x = Integer.parseInt(num1); 
      y = Integer.parseInt(num2); 
      System.out.println(num1 + " " + calc + " " + num2 + " " + "=" + " " + operation.Divide(x, y)); 
      //System.out.println(num1 + " " + calc + " " + num2 + " " + "=" + " " + (x/y)); 
     } 
     else{ 
      System.out.println("The operation is not valid. You can give +, -, *,/for operator!"); 
      } 
    } 
    System.exit(0); 
} 

}