java - 在cmd中do while循环显示内容3次

标签 java

我有以下程序,在运行它时,我将菜单打印了 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
2

Result 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/

相关文章:

java - Gradle + Intellij 想法 : run configuration

java - 将 "double"添加到 List<Double> doubleList

java - 如何使用 actionbarsherlock 创建自定义下拉菜单?

java - Apache Cassandra 在读取负载过重时崩溃

java - 如何使用 javax.sound.sampled 包同时播放一组频率(和弦)

java - 从类的完全限定名中获取类

java - Spring - 切换要使用的SchedulerFactoryBean

java - 如何处理 DBUtil 中的 Date 类型值

java - 使用流收集列表到联合列表

java - RxJava2多线程或者出现问题