1
回答
【我是菜鸟】Io流输出,对System.out.read()进行循环,输出结果会重复三遍
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

问题基本描述:我在win7的命令行下调用java编译<<java完全手册>>上的一个程序,内容贴在下面。编译时候不会报错,但是会出现类似于重复输出三次的问题。

代码在这里

class contral{
public static void main(String args[])
throws java.io.IOException {
char choice;
int ind1;//pasage index1
System.out.println("your choice?");
System.out.println("Help infor:");
System.out.println("1.if");
System.out.println("2.do-while");
System.out.println("3.while");
System.out.println("4.switch");
System.out.println("5.for");
do{
choice=(char)System.in.read();//remark a
switch(choice){
case '1':System.out.print("If(bull value)\n"); 
System.out.print("  statement\n");
System.out.print("else\n");
System.out.print("  statement\n");
break;
case '2':System.out.print("do (statement)\n  while (bull value)");
break;
case '3':System.out.print("while (bull valie)\n  (statement)");
break;
case '4':System.out.print("switch (value)\n case a1\n  statement1 \n  break;...");
break;
case '5':System.out.print("for (variable = initial value; bull value formula; step length)\n  statement");
break;
default: System.out.println("Wrong message, input the right message again.");//Goto remark a 


break;
}
}while (choice<'1'||choice>'5');
//}while (ind1==1);


}
}




输出结果在这里

D:\ProgramData\Java\java Menu

Help on:

1. if

2. switch

3.while 

4.do-while

5.for

Choose one 

a //我输入的值,按a之后回车

Help on:

1. if

2. switch

3.while 

4.do-while

5.for

Choose one:

Help on:

1. if

2. switch

3.while 

4.do-while

5.for

Choose one 

Help on:

1. if

2. switch

3.while 

4.do-while

5.for

Choose one 

__(第二次提示输入)

也就是字符串出现三次,但是后两次是自动弹出的,完全是多余的。

第一次发表问题,不知道我表达清楚了没有。请各位大大指正!

举报
onlyamoment
发帖于2年前 1回/241阅
共有1个答案 最后回答: 2年前

     这是因为在你输入a之后还有一个回车符\n 而这个回车符号正好也是两个字节,导致多出了两个  输出信息。

    我们可以使用 Scanner读取用户输入的一行信息,然后只取第一个字节作为,判断标准,其他的字符全部忽略。e.g


import java.util.Scanner;

class contral {
    public static void main(String args[])
            throws java.io.IOException {
        byte choice;
        System.out.println("your choice?");
        System.out.println("Help infor:");
        System.out.println("1.if");
        System.out.println("2.do-while");
        System.out.println("3.while");
        System.out.println("4.switch");
        System.out.println("5.for");
        Scanner sc = new Scanner(System.in);
        do {
            choice =  sc.nextLine().getBytes()[0];//remark a
            switch (choice) {
                case '1':
                    System.out.print("If(bull value)\n");
                    System.out.print("  statement\n");
                    System.out.print("else\n");
                    System.out.print("  statement\n");
                    break;
                case '2':
                    System.out.print("do (statement)\n  while (bull value)");
                    break;
                case '3':
                    System.out.print("while (bull valie)\n  (statement)");
                    break;
                case '4':
                    System.out.print("switch (value)\n case a1\n  statement1 \n  break;...");
                    break;
                case '5':
                    System.out.print("for (variable = initial value; bull value formula; step length)\n  statement");
                    break;
                default:
                    System.out.println("Wrong message, input the right message again.");//Goto remark a


                    break;


            }
        } while (choice < '1' || choice > '5');


    }
}


--- 共有 2 条评论 ---
小凯回复 @onlyamoment : 同样的道理,在Scanner 读取一行数据之后,也会读取一个换行符,所以byte[1] 取出来的应该是换行符,程序依然不报错,如果解决了你的问题,请采纳。 2年前 回复
onlyamoment感谢老大!还有个问题,在调用getbyte()[0]的时候,这里的getByte()是一个数组吗?为什么我把【0】改成【1】编译无错但是执行时候有错呢? 无论如何,我已经非常感谢您了! 2年前 回复
顶部