Java:为什么这个程序使用char而不是int?
问题描述:
我正在学习java,并且在我正在学习的书中遇到了一个示例程序。我决定试验一下,我不明白为什么它不能按预期工作。程序非常简单,它是一个菜单,应该根据用户输入输出一些Java语句的一般形式。代码如下:Java:为什么这个程序使用char而不是int?
public class SimpleMenu {
public static void main(String args[])
throws java.io.IOException {
int choice;
do {
System.out.println("Help on: ");
System.out.println(" 1. IF");
System.out.println(" 2. WHILE");
System.out.println(" 3. DO WHILE");
System.out.println(" 4. FOR");
System.out.println(" 5. SWITCH\n");
System.out.println("Choose one: ");
choice = System.in.read();
} while ((choice < 1) || (choice > 5));
System.out.println("\n");
switch (choice) {
case 1:
System.out.println("if(condition) statement1;\n else statement2;");
break;
case 2:
System.out.println("while(condition){\n //body of loop \n }");
break;
case 3:
System.out.println("do{ \n //body of loop \n } while(condition);");
break;
case 4:
System.out.println("for(initialization; termination; increment/decrement){ \n statement; \n }");
break;
case 5:
System.out.println("switch(value){\n case 1: \n statement; \n break; \n default:\n statement;\n}");
break;
}
}
}
无论输入什么数字,它都会经过两次do-while循环,并期待再次输入。 这是原来的代码:
public class MenuFromBook {
public static void main(String args[])
throws java.io.IOException {
char choice;
do {
System.out.println("Help on: ");
System.out.println(" 1. if");
System.out.println(" 2. switch");
System.out.println(" 3. while");
System.out.println(" 4. do-while");
System.out.println(" 5. for\n");
System.out.println("Choose one:");
choice = (char) System.in.read();
} while(choice < '1' || choice > '5');
System.out.println("\n");
switch(choice) {
case '1':
System.out.println("The if:\n");
System.out.println("if(condition) statement;");
System.out.println("else statement;");
break;
case '2':
System.out.println("The switch:\n");
System.out.println("switch(expression) {");
System.out.println(" case constant:");
System.out.println(" statement sequence");
System.out.println(" break;");
System.out.println(" //...");
System.out.println("}");
break;
case '3':
System.out.println("The while:\n");
System.out.println("while(condition) statement;");
break;
case '4':
System.out.println("The do-while:\n");
System.out.println("do {");
System.out.println(" statement;");
System.out.println("} while (condition);");
break;
case '5':
System.out.println("The for:\n");
System.out.print("for(init; condition; iteration)");
System.out.println(" statement;");
break;
}
}
但我不明白为什么它必须这样做,为什么不能选择是int和这样的工作吗?我希望我很清楚......
答
System.in.read()从键盘读取ascii字符的输入,并且如果您查看ascii chart,您会看到数字0-9实际上处于48-57。因此,如果您将结果与实际的ASCII代码进行比较,您的代码将正常工作。使用'1'
你可以做到这一点:'1'
是int 49,所以比较工作。
答
System.in
是InputStream
。 read()
-方法读取一个字节的数据。在这种情况下,输入ASCII 1(字节= 49)。尝试打印的选择,看看它的价值,这应该是在49的情况下输入1
https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read%28%29 http://www.asciitable.com/
你有什么调试'choice'的价值是,它运行在第二次循环之前? – dunni
使用调试器逐行执行一行代码。不知道如何使用调试器?现在是学习的时候了,因为它是编码的基本要求。 –
读取的输入是字符而不是整数。原始程序将字符与字符“1”进行比较。 你的程序只是比较char值到int'1'。作为输入读取的char值也具有一个int值,该值是该字符的ASCII值。因此它们不匹配。 – inquizitive