gpt4 book ai didi

java - 在此程序中,循环控制变量每次迭代仅增加 1,但输出显示并非如此

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:32 24 4
gpt4 key购买 nike

在“Java:初学者指南”中的以下代码中,当键入单个字符时,for 循环似乎迭代不止一次,即使循环控制变量 i 每次迭代只应递增 1。

进入for循环的条件是根据用户输入的。程序将进入循环并将 i 递增 1,直到用户键入字符 S。程序每次进入循环,都会打印出i。

class ForTest {
public static void main(String args[])
throws java.io.IOException {

int i;

System.out.println("Press S to stop.");

for(i = 0; (char) System.in.read() != 'S'; i++)
System.out.println("Pass #" + i);
}
}

因此,当键入除 S 以外的字符时,程序会打印出 Pass #0,然后等待用户输入下一个字符。奇怪的是,它循环三次,在要求用户输入下一个字符之前打印 Pass #0 Pass #1 和 Pass #2。

预期:

a
Pass #0
b
Pass #1
S

实际:

a
Pass #0
Pass #1
Pass #2
b
Pass #3
Pass #4
Pass #5
S

最佳答案

如果你为了调试它而稍微改变一下程序:

char myChar;

for(i = 0; (myChar = (char) System.in.read()) != 'S'; i++)
System.out.println("Pass #" + i + " the character from the console is: " + (byte)myChar);
}

然后运行它,你会看到哪些字符实际上来自输入流:

Press S to stop.
Pass #0 the character from the console is: 97
Pass #1 the character from the console is: 10
Pass #2 the character from the console is: 98
Pass #3 the character from the console is: 10

97 - 是一个
10 - 是换行符
98 - 是 b
10 - 是换行符


我希望你现在清楚了 - 如果你按下 a + Enter,然后控制台返回 a + line feed 字符到程序,即两个字符,而不是一个。

关于java - 在此程序中,循环控制变量每次迭代仅增加 1,但输出显示并非如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54156784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com