程序无法正确循环

时间:2014-03-06 00:09:47

标签: java loops command-line-interface

我的程序似乎工作得很好,除了当它应该循环回到要求用户操作员的部分时,消息显示但是没有空间让用户输入操作员并且它直接跳转以询问第一个号码,I不知道我做错了什么或不做。我需要帮助!

这是我到目前为止所做的:

import java.util.Scanner;

public class LabTresFinal
{

  public static void main (String [] arguments)
  {
    Scanner Keyboard = new Scanner ( System.in );  

    //Declared Variables
    String operator;
    double more;
    double number1;
    double number2;
    double ans;
    boolean flag= true;

    do
     {
      //Prompt user for operation and numbers
      //Had to prompt for operation first otherwise my program was not runing correctly

      System.out.println( "Please choose an operation to be performed: + , - , * , / , or % .");
      operator = Keyboard.nextLine();
      System.out.println("Enter first number");
      number1 = Keyboard.nextDouble ();
      System.out.println("Enter second number");
      number2 = Keyboard.nextDouble ();

      switch (operator)
        {
          case ("+"):
          ans = number1 + number2;
          System.out.println(number1 + " + " + number2 + " = " + ans);

          break;

          case ("-"):
          ans = number1 - number2;
          System.out.println(number1 + " - " + number2 + " = " + ans);

          break;

          case ("*"):
          ans = number1 * number2;
          System.out.println(number1 + " * " + number2 + " = " + ans);

          break;

          case ("/"):

          if (number2 >= 1)
           {
             ans = number1 / number2;
             System.out.println(number1 + " / " + number2 + " = " + ans);

           }else if (number2 ==0)
           {
             System.out.println("Error: Operation cannot be performed with second number as zero, please try again");
             while(flag)
              {
                System.out.println("Enter second number");
                number2 = Keyboard.nextDouble ();
                if(number2>=1)
                 {
                   ans = number1 / number2;
                   System.out.println(number1 + " / " + number2 + " = " + ans);
                   flag=false;
                 }else if(number2 ==0)
                   {
                     System.out.println("Error: Operation cannot be performed with second number as zero, please try again");
                   }
              }
       }

     break;

     case ("%"):
     ans = number1 % number2;
     System.out.println(number1 + " % " + number2 + " = " + ans);

     break;
      }

  //setting loop for program to restart if user wants to
  System.out.println("Again?" 
                       + "\n" + "enter 1 for yes"
                       + "\n" + "enter 2 for no");
  more = Keyboard.nextDouble();
}while (more== 1);

} }

这是我的程序应该做的:

必须:
- 基于CLI   - 为每个操作员保持运行总数(增加多少次,多少次,......) - 提示用户输入2个号码 - 提示用户操作员
- 处理除以零的情况   - 执行操作
- 在屏幕上向用户显示结果
- 循环直到用户使用标记值
- 显示统计数据:每个操作的计数,最小值,最大值。

我知道我仍然需要做很多工作,但我现在需要帮助解决这个问题,所以我可以继续工作。

非常感谢你。

2 个答案:

答案 0 :(得分:1)

这是因为,虽然nextDouble()会跳过换行符和空格,但在解析一个令牌之后(仅在之前),它不会消耗换行符。因此,换行符将保留在流中,下一次调用nextLine()会立即获取(空白行)。

干净利落地处理这个问题的一个选择是始终使用nextLine(),然后将字符串显式解析为Double(例如使用Double.valueOf)。

其他选项是Scanner issue when using nextLine after nextXXX的答案。

顺便说一句,传统的Java命名约定是用小写字母开始变量名。作为混淆可能性的一个例子,我个人第一次阅读你的代码时,我以为你正在使用一个名为Keyboard的类和静态方法(它也混淆了StackOverflow的语法高亮显示)。

答案 1 :(得分:1)

而不是使用:

Keyboard.nextLine();

尝试:

Keyboard.next();

这不应该跳过输入请求,您应该能够输入新的操作符。