在 while 循环中停止重复的 Println,BlueJ
Stopping a repeating Println in a while loop, BlueJ
下面是我目前的代码,它是我的计算机科学的计算器 class。我遇到的问题是在程序的第二个 运行 上 System.out.print("Would you like to perform a calculation? (y/n) "); 运行s 两次而不是一次。我已经上交了这个项目,但我想知道它为什么会这样,以及在我未来的项目中如何修复它。我将 post 下面的其余代码。
感谢大家的帮助,"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;
}
}
}
}
尝试添加这个 reader.nextLine();在 while 循环结束之前,如下所述。这将清除屏幕缓冲区。
else if (cont.equalsIgnoreCase("n"))
{
break;
}
reader.nextLine();
}
希望这有帮助,
基本上,当您使用 reader.nextLine()
方法时,缓冲区中仍然有一个换行符,调用 nextLine() 时会拾取该换行符。所以它用换行符制作了一个额外的 运行 。如果你 运行 你的程序使用换行符作为输入,即使是第一次,它也会循环而不做任何事情。因此,您只需要在进入 while 循环之前清除缓冲区。
在循环内的所有函数条件中,您使用的是 reader.nextDouble()。这只会读取数字(例如“8”)输入,而不是用户在数字后输入的新行(回车)。
minus(-) 函数的以下代码不会打印 "Would you like to perform a calculation? (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(" ");
}
您需要在调用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(" ");
}
下面是我目前的代码,它是我的计算机科学的计算器 class。我遇到的问题是在程序的第二个 运行 上 System.out.print("Would you like to perform a calculation? (y/n) "); 运行s 两次而不是一次。我已经上交了这个项目,但我想知道它为什么会这样,以及在我未来的项目中如何修复它。我将 post 下面的其余代码。
感谢大家的帮助,"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;
}
}
}
}
尝试添加这个 reader.nextLine();在 while 循环结束之前,如下所述。这将清除屏幕缓冲区。
else if (cont.equalsIgnoreCase("n"))
{
break;
}
reader.nextLine();
}
希望这有帮助,
基本上,当您使用 reader.nextLine()
方法时,缓冲区中仍然有一个换行符,调用 nextLine() 时会拾取该换行符。所以它用换行符制作了一个额外的 运行 。如果你 运行 你的程序使用换行符作为输入,即使是第一次,它也会循环而不做任何事情。因此,您只需要在进入 while 循环之前清除缓冲区。
在循环内的所有函数条件中,您使用的是 reader.nextDouble()。这只会读取数字(例如“8”)输入,而不是用户在数字后输入的新行(回车)。 minus(-) 函数的以下代码不会打印 "Would you like to perform a calculation? (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(" ");
}
您需要在调用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(" ");
}