【发布时间】:2012-10-18 01:56:27
【问题描述】:
我很难找到有关 System.in.read(); 工作原理的详细信息,也许有人可以帮助我。似乎 Scanner 会更好,但我不允许使用它。
我被分配了一个任务,我应该以 Boolean-Operator-Boolean 形式读取控制台用户输入,例如T^F 或 T&T 通过System.in.read() 并简单地打印语句返回的内容。
普通人可能会使用不同的方法,但作业明确指出只允许使用 System.in.read() 和 System.out.println()。
这是我解决它的尝试:
import java.io.*;
public static void main(String[] args) {
String error = "Reading error, please use T or F";
boolean a = true; //char: 84 or 116 for T and t
boolean b = false; //char: 70 or 102 for F and f
int userChar1;
int userOperator;
int userChar2;
int chosenOperator = 0;
try {
//Get first char
System.out.println("Enter the first value (T or F):");
userChar1 = System.in.read();
if((userChar1==84)||(userChar1==116)) { // T or t
a = true;
} else if ((userChar1==70)||(userChar1==102)) { // F or f
a = false;
} else {
System.out.println(error);
}
//Get second char
System.out.println("Select an operator: & | ^");
userOperator = System.in.read();
if(userOperator==38) { // &
chosenOperator = 0;
} else if (userOperator==124) { // |
chosenOperator = 1;
} else if (userOperator==94) { // ^
chosenOperator = 2;
} else {
System.out.println(error);
}
//Get third char
System.out.println("Enter the second value:");
userChar2 = System.in.read();
System.in.close();
if((userChar2==84)||(userChar2==116)) {
b = true;
} else if ((userChar2==70)||(userChar2==102)) {
b = false;
} else {
System.out.println(error);
}
//Figure out result
boolean result;
switch (chosenOperator) {
case 0:
result = a&b;
case 1:
result = a|b;
case 2:
result = a^b;
System.out.println(result);
}
} catch(IOException e) {
}
}
执行此代码会使控制台在第一个System.in.read() 之后等待用户输入,并让它正确检查字符输入。然而,在那之后,所有后续的System.in.read() 都将被忽略并且程序终止。
我发现了一段使用System.in.close() 的代码,所以仍然不知道在每个System.in.read() 之后我将其拼接到的具体方法是什么。这会导致程序在调用 System.in.close() 之后的第一个 System.in.read() 时终止。
那么,到底发生了什么?如何正确使用System.in.read()?
【问题讨论】:
-
如果你坚持使用
read(),那么你将不得不阅读两次并且只使用第一个结果作为输入。