java - 循环内变量的初始化

标签 java

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/

相关文章:

java - 对象与 JSON 之间的转换

Java/从 .txt 文件读取

Java程序使用sqoop导入数据

java - 将字符串转换为 byte[] 返回错误值(编码?)

java - 字符串因未知原因被初始化为 0

Java - 连接两个输出流

java - 将 IntelliJ 格式化程序选项导入 Eclipse?

java - 能否使用 fork/join 跨线程边界安全地移植非线程安全值?

java - 使用自定义 validator 手动验证,无需默认构造函数

java - 如何在 java 中将日期添加 2 周?