class Spaces {
public static void main(String args[])
throws java.io.IOException{
char ch;
int space = 0;
do {
ch = (char) System.in.read();
if (ch == ' ') space++;
} while (ch != '.'); //Stop if fullstop is provided
System.out.println("No. of spaces: " + space);
}
上面的以下代码是完全正确的,并且正在执行其预期的操作。(读取字符直到按下句点,然后告诉用户已输入了多少个空格)。尽管如果我在 do-while 循环之外初始化变量,如以下代码所示:
class Spaces {
public static void main(String args[])
throws java.io.IOException{
char ch = (char) System.in.read();
int space = 0;
do {
if (ch == ' ') space++;
} while (ch != '.'); //Stop if fullstop is provided
System.out.println("No. of spaces: " + space);
}
程序拒绝停止。当我输入句号时,程序并没有停止。我确实知道在循环内声明变量意味着它在循环外的其他地方不可用。但是在循环外部声明的变量(如第二组代码中)应该在循环和其他地方工作。所以我不明白为什么第二组代码无效(程序运行,没有编译错误,但是当输入句号时它继续运行)。
我也知道与这里提出的问题相比,这是一个非常基本的问题。但老实说我找不到答案。预先感谢您。
最佳答案
第二个程序不起作用,因为您只接受一次输入,并且由于 ch != '.'
的值始终为 true,因此循环永远不会停止。您应该将 System.in.read() 放在循环内,以便在每次迭代中,程序都会停止以等待用户输入,将其与条件进行比较,然后决定是否应该进行下一次迭代是否执行。
关于java - 循环内变量的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31682150/