我很难找到有关确切System.in.read();
工作原理的详细信息,也许有人可以帮助我。似乎 Scanner 会更好,但我不允许使用它。
我被分配了一个任务,我应该以 Boolean-Operator-Boolean 形式读取控制台用户输入,例如 T^F 或 T&T via 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.read()
在 a 之后的第一个System.in.close()
被调用时终止。
那么,到底发生了什么?你会如何System.in.read()
正确使用?