我有以下程序,在运行它时,我将菜单打印了 3 次。我本来只期待一个,并立即提示输入。
class whileexample2
{
public static void main(String args[]) throws java.io.IOException
{
char i;
int a = 100;
int b = 20;
do
{
System.out.println("select your choice");
System.out.println("---------------------");
System.out.println("(1) Additon");
System.out.println("(2) Subtraction");
System.out.println("(3) Multiplication");
System.out.println("(4) Division");
i = (char) System.in.read();
} while (i < '1' || i > '4');
System.out.println("\n");
switch(i)
{
case '1':
{
System.out.println("Result of addition is: " + (a + b));
break;
}
case '2':
{
System.out.println("Result of subtraction is: " + (a - b));
break;
}
case '3':
{
System.out.println("Result of multiplication is: " + (a * b));
break;
}
case '4':
{
System.out.println("Result of division is: " + (a / b));
break;
}
}
}
}
输出
select your choice
---------------------
(1) Additon
(2) Subtraction
(3) Multiplication
(4) Division
7 //incorrect input, thus show menu again, but it will be printed 3 times select your choice
---------------------
(1) Additon
(2) Subtraction
(3) Multiplication
(4) Division
select your choice
---------------------
(1) Additon
(2) Subtraction
(3) Multiplication
(4) Division
select your choice
---------------------
(1) Additon
(2) Subtraction
(3) Multiplication
(4) Division
2Result of subtraction is: 80
最佳答案
i = (char) System.in.read();
该行给您带来了问题。您在此流中输入的不仅仅是一个数字,因为当您点击“Enter”时,您将在流中插入一个回车符,然后插入一个换行符。这会导致您的 while 循环执行三次,因为它正在读取的流包含字符“7”、“\r”和“\n”。
考虑使用扫描仪并仅检查输入的第一个字符。扫描仪往往更可靠且独立于平台:
import java.util.Scanner;
class WhileExample2{
public static void main(String args[]){
Scanner kb = new Scanner(System.in);
char i;
int a=100;
int b=20;
do
{
System.out.println("select your choice");
System.out.println("---------------------");
System.out.println("(1) Additon");
System.out.println("(2) Subtraction");
System.out.println("(3) Multiplication");
System.out.println("(4) Division");
i = kb.nextLine().charAt(0);
}while(i < '1' || i > '4');
//rest of code
}
}
关于java - 在cmd中do while循环显示内容3次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123952/