在一个while循环中停止重复的Println,BlueJ

时间:2015-10-31 03:13:54

标签: java bluej

以下是我到目前为止的代码,它是我计算机科学课程的计算器。我遇到的问题是在程序的第二次运行System.out.print(“你想进行计算吗?(y / n)”);运行两次而不是一次。我已经参与了这个项目,但是我想知道为什么会这样做,以及在未来的程序中我如何解决它。我将在下面发布其余的代码。

我感谢你们所有人的帮助,我将所得到的“A”归功于你们所有人。谢谢!

/**
* A calculator with multiple functions.
* @author () 
* @version (version 2.1)
*/
import java.io.*;
import java.util.Scanner;
public class Calc
{
  public static void main(String args[])
  {
    Scanner reader = new Scanner(System.in);
    String cont = "", funct = "";
    double fnum = 0, snum = 0, answer = 0;

    while(true)
    {
        System.out.print("Would you like to perform a calculation? (y/n) ");
        cont = reader.nextLine();
        if (cont.equalsIgnoreCase("y"))
        {
            System.out.println("What function would you like to do?");
            System.out.println("+?");
            System.out.println("-?");
            System.out.println("*?");
            System.out.println("/?");
            funct = reader.nextLine();
            if (funct.equals("+"))
            {
                System.out.println("Simple addition calculator");
                System.out.println("Enter first num: ");
                fnum = reader.nextDouble();
                System.out.println("Enter second num: ");
                snum = reader.nextDouble();
                answer = fnum + snum;
                System.out.println("Answer: " + answer);
                System.out.println(" ");
            }
            if (funct.equals("-"))
            {
                 System.out.println("Simple subtraction calculator");
                System.out.println("Enter first num: ");
                fnum = reader.nextDouble();
                System.out.println("Enter second num: ");
                snum = reader.nextDouble();
                answer = fnum - snum;
                System.out.println("Answer: " + answer);
                System.out.println(" ");
            }
            if (funct.equals("*"))
            {
                 System.out.println("Simple multiplication calculator");
                System.out.println("Enter first num: ");
                fnum = reader.nextDouble();
                System.out.println("Enter second num: ");
                snum = reader.nextDouble();
                answer = fnum * snum;
                System.out.println("Answer: " + answer);
                System.out.println(" ");
            }
            if (funct.equals("/"))
            {
                 System.out.println("Simple division calculator");
                System.out.println("Enter first num: ");
                fnum = reader.nextDouble();
                System.out.println("Enter second num: ");
                snum = reader.nextDouble();
                answer = fnum / snum;
                System.out.println("Answer: " + answer);
                System.out.println(" ");
            }
        }
        else if (cont.equalsIgnoreCase("n"))
        {
            break;
        }

    }
  }
}

4 个答案:

答案 0 :(得分:2)

在循环内的所有功能条件中,您使用 reader.nextDouble()。这将只读取数字(例如“8”)输入而不是用户在数字后输入的新行(输入)。 对于减号( - )函数的以下代码将不会打印“您是否要执行计算?(y / n)”两次,因为已经读取了新行。这里使用 reader.nextLine()代替 reader.nextDouble() reader.nextLine()不仅会读取整行数字。

if (funct.equals("-"))
        {
            System.out.println("Simple subtraction calculator");
            System.out.println("Enter first num: ");
            fnum = Double.parseDouble( reader.nextLine());
            System.out.println("Enter second num: ");
            snum = Double.parseDouble( reader.nextLine());
            answer = fnum - snum;
            System.out.println("Answer: " + answer);
            System.out.println(" ");
        }

答案 1 :(得分:2)

在调用nextDouble()之后和下一个nextLine()之前,需要使用换行符,以防止nextLine()使用换行符。否则 funct = reader.nextLine(); 将新行字符作为输入,而不是等待任何更多用户输入,这会导致重复。

if (funct.equals("/"))
            {
                System.out.println("Simple division calculator");
                System.out.println("Enter first num: ");
                fnum = reader.nextDouble();
                System.out.println("Enter second num: ");
                snum = reader.nextDouble(); // consume the new line character
                reader.nextLine();
                answer = fnum / snum;
                System.out.println("Answer: " + answer);
                System.out.println(" ");
            }

答案 2 :(得分:0)

尝试添加此reader.nextLine();在while循环结束之前,如下所述。这将清除屏幕缓冲区。

else if (cont.equalsIgnoreCase("n")) { break; } reader.nextLine(); } 希望这会有所帮助,

答案 3 :(得分:0)

基本上发生的事情是当你使用reader.nextLine()方法时,缓冲区中仍然有一个换行符,在调用nextLine()时会被拾取。因此,它使用换行符进行额外运行。如果你用newline作为输入运行你的程序,即使是第一次,它也会循环而不做任何事情。因此,您只需要在进入while循环之前清除缓冲区。