do-while循环的问题

时间:2014-01-22 15:46:59

标签: java do-while

我只是java编码的初学者我只是编写一个简单的程序:如果用户输入正确的数字,用户将获得一个菜单,他必须输入1-4之间的数字,如果输入了错误的数字,则需要完成任务,用户再次被要求输入。以下是我的程序

class menu {
  public static void main(String [] args) throws java.io.IOException {
        int choice;
        do
        {
            System.out.println("HELP MENU: ");
            System.out.println("IF STATEMENT: 1 ");
            System.out.println("WHILE: 2 ");
            System.out.println("DO WHILE: 3 ");
            System.out.println("SWITCH: 4 ");
            choice = System.in.read();
            System.out.println(choice);
        }

        while( choice < 1 || choice > 4);
        System.out.println("\n");
        System.out.println(choice);

        switch (choice)
        {
        case 1:
            System.out.println("if statement is selected");
            break;
        case 2:
            System.out.println("while statement is selected");
            break;

        case 3:
            System.out.println("do while statement is selected");
            break;

        case 4:
            System.out.println("switch statement is selected");
            break;
        }
    }
}

输出: +++++++

E:\study\javacode>java menu 
HELP MENU:
IF STATEMENT: 1
WHILE: 2
DO WHILE: 3
SWITCH: 4
4
52
HELP MENU:
IF STATEMENT: 1
WHILE: 2
DO WHILE: 3
SWITCH: 4
13
HELP MENU:
IF STATEMENT: 1
WHILE: 2
DO WHILE: 3
SWITCH: 4
10
HELP MENU:
IF STATEMENT: 1
WHILE: 2
DO WHILE: 3
SWITCH: 4

用户通过键盘输入的内容,代码继续通过do-while循环迭代。通过打印输入值识别原因,我发现输入值被代码错误。请帮忙解决此

3 个答案:

答案 0 :(得分:2)

要阅读数字或String,我建议您使用Scanner个对象。在main()

的开头创建并实例化它
Scanner in = new Scanner(System.in);

并调用nextInt()中的do-while方法:

do {
    System.out.println("HELP MENU: ");
    System.out.println("IF STATEMENT: 1 ");
    System.out.println("WHILE: 2 ");
    System.out.println("DO WHILE: 3 ");
    System.out.println("SWITCH: 4 ");
    choice = in.nextInt();
    System.out.println(choice);
} while (choice < 1 || choice > 4);

注意:

  • System.in.read()实际上是返回您输入的字符的int值。例如,如果您输入1,该方法将返回49,等于(int)'1'
  • 正如我之前提到的,您可以使用Scanner使用方法String来阅读nextLine()

修改

只是看到你可以使用System.in.read()(你必须阅读文档来了解它的作用)来读取一个整数,试试这个(在一个单独的文件中,所以你不要t意外修改你的代码):

int i = System.in.read();
System.out.println(Integer.parseInt(Character.toString(((char) i))));

答案 1 :(得分:1)

问题是你正在使用InputStream.read(),它从流中读取一个字节,而不是一个字符,例如如果输入'1',read()将返回0x31。

read()的Javadoc:

/**
 * Reads the next byte of data from the input stream. The value byte is
 * returned as an <code>int</code> in the range <code>0</code> to
 * <code>255</code>. If no byte is available because the end of the stream
 * has been reached, the value <code>-1</code> is returned. This method
 * blocks until input data is available, the end of the stream is detected,
 * or an exception is thrown.
 *

答案 2 :(得分:0)

System.in.read()并不像你认为的那样有效。它读取一个字符(不是int)并返回一个字节值,而不是整数。

当用户输入“1”时,read()返回49,这是字符“1”的整数字节值。 (50为'2',51为'3'等)。

@Christian's scanner suggestion非常好。我认为你应该这样做。

或者,您可以将switch语句更改为使用49/50/51 /等,但这有点难看。