我很难找到具体的细节System.in.read();
有效,也许有人可以帮助我。似乎扫描仪会更好,但我不允许使用它。
我被分配了一个任务,我应该以 Boolean-Operator-Boolean 的形式读取控制台用户输入,例如T^F 或 T&T 通过System.in.read()
并简单地打印语句返回的内容。
普通人可能会使用不同的方法,但作业明确指出,只有System.in.read()
and 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()
之后System.in.close()
叫做。
那么,究竟发生了什么?你会如何使用System.in.read()
正确吗?
问题不在于 System.in.read(),而在于控制台。
控制台通常是缓冲的,这意味着只有在按下回车键后数据才会发送到您的程序(因此可由 System.in.read() 读取)。
因此,您必须将控制台切换到无缓冲模式,但没有可移植的方法来执行此操作,因为有很多不同类型的控制台(unix shell、cmd 窗口、Eclipse 控制台等)。
如果不允许使用除 System.in.read() 和 System.out.println() 之外的任何方法,则必须让用户在一行中输入完整的术语,按 Enter 键,然后才能处理字符输入,例如:
public static void main(String[] args) throws IOException {
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;
System.out.println("Please enter the term, e.g. T&F:");
userChar1 = System.in.read();
userOperator = System.in.read();
userChar2 = System.in.read();
a = userChar1 == 'T' || userChar1 == 't';
b = userChar2 == 'T' || userChar1 == 't';
switch (userOperator) {
case '&':
System.out.println(a & b);break;
case '|':
System.out.println(a | b);break;
case '^':
System.out.println(a ^ b);break;
default:
System.out.println("unknow operator");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)