Java 为什么这行要打印多次?
我想打印一行Java 为什么这行要打印多次?,java,while-loop,Java,While Loop,我想打印一行“输入字符:,然后获取输入字符并分配它,然后继续重复,直到输入了-或?。但是,“输入字符:”在最初打印一次后,在第一次输入后打印多次。输入'?'或'-'也不会退出循环 方法如下: private void runPrompt() { Deque<Character> first = new Deque<Character>(); Deque<Character> second = new Deque<Character
“输入字符:
,然后获取输入字符并分配它,然后继续重复,直到输入了-
或?
。但是,“输入字符:”
在最初打印一次后,在第一次输入后打印多次。输入'?'
或'-'
也不会退出循环
方法如下:
private void runPrompt() {
Deque<Character> first = new Deque<Character>();
Deque<Character> second = new Deque<Character>();
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
char userChar = 0;
int firstWord = 0;
int secondWord = 0;
boolean isMinus = false;
while (!isMinus) {
System.out.print("Enter character: ");
try {
userChar = (char) reader.read();
System.out.println(userChar);
first.enqueue(userChar);
firstWord++;
if (userChar == '-') {
isMinus = true;
}
} catch (QueueException e) {
System.out.println(e.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
if (isMinus) {
while (userChar != '?') {
System.out.print("Enter character: ");
try {
userChar = (char) reader.read();
System.out.println(userChar);
second.enqueue(userChar);
secondWord++;
} catch (QueueException e) {
System.out.println(e.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
switch (checkLength(firstWord, secondWord, isMinus)) {
case 0:
System.out.print("\t>>Same length, ");
if (checkContent(first, second)) {
System.out.print("Same content, ");
if (checkPalindrome(first, firstWord)) {
System.out.println("Palindrome");
}
} else {
System.out.println("Different content, no Palindrome");
}
break;
case 1:
System.out
.println("\t>>Left longer, different content, no Palindrome");
break;
case 2:
System.out
.println("\t>>Right longer, different content, no Palindrome");
break;
case 3:
System.out.println("\t>>No minus");
default:
break;
}
}
由于它一个字符一个字符地读取,所以它实际上读取r,然后是回车符(CR),最后是换行符(LF)。您可以打印该值并亲自查看:
System.out.println((int)userChar);
它显示了我提到的字符的UTF-16代码单位值。因此,对于每个输入,循环将再执行两次。然后它返回并等待下一个输入-这就是为什么总共有四个
Enter character:
语句可见的原因。您可以使用类似于readLine().charAt(0)
的方法来避免这种情况。可能有某种方法可以刷新缓冲区中挂起的输入,但我现在不回忆它 如果(userChar='-'){isMinus=true;}应写入isMinus=userChar='-'),则使用readLine()读取单行后清除缓冲区
@JarrodRoberson我使用.equalsIgnoreCase()
谢谢,这是固定的。Java字符串、字符和字符使用Unicode/UTF-16,所以不用ASCII,而是说UTF-16代码单位值。(+1)谢谢,可以!
System.out.println((int)userChar);