为什么循环中的赋值会影响程序执行的其余部分?

时间:2015-09-16 01:12:43

标签: java

我最近编写了一个非常简单的程序。 99瓶啤酒歌曲。

public class apples {
    public static void main(String[] args) {
        int beerNum = 99;
        String word = "bottles";

        while(beerNum > 0) {

            if(beerNum == 1) {
                word = "bottle";
            }

            System.out.println(beerNum + " " + word + " of beer on the wall, " + beerNum + " " + word + " of beer.");

            if(beerNum > 0) {
                System.out.println("Take one down, pass it round " + beerNum + " " + word + " of beer");
            }
            beerNum = beerNum - 1;
        }
        if(beerNum == 0) {
            System.out.println("No more bottles of beer on the wall.");
        }
    }
}

代码块如何正常工作?我想我的具体问题是为什么

if(beerNum == 1) {
    word = "bottle
}

在我的小程序中普遍工作?由于代码块直到程序结束才运行,后面的代码行如何知道beerNum == 1时单词瓶应该是单数?

4 个答案:

答案 0 :(得分:0)

这是有效的,因为Java按照它们在代码中出现的顺序读取所有代码行。这似乎微不足道,但如果你移动你的块

if(beerNum == 1) {
    word = "bottle
}

到你的while循环结束时,你的代码不会工作(瓶子仍然是复数),即使递减效果仍然有效。

答案 1 :(得分:0)

正确更改代码块

{{1}}

这将为您提供相同的输出。希望这有助于您更好地理解

答案 2 :(得分:0)

它知道要打印bottle而不是bottles,因为最初您已将word变量设置为"bottles"。但如果beerNum为1,则单词将更改为bottle,因为if语句

if(beerNum == 1) {
    word = "bottle
}

首先在while循环中检查并更改word变量。

答案 3 :(得分:0)

我认为您的代码没有问题。你可以在任何IDE中运行它或使用命令行来运行吗?!在代码

中只是琐碎的事情
 if(beerNum > 0) {
    System.out.println("Take one down, pass it round " + beerNum + " " + word + " of beer");
        }
 beerNum = beerNum - 1;

我认为我们不需要检查beerNum> 0,就像这样:

while(beerNum > 0) {

    if(beerNum == 1) {
       word = "bottle";
    }

    System.out.println(beerNum + " " + word + " of beer on the wall, " + beerNum + " " + word + " of beer.");
    System.out.println("Take one down, pass it round " + beerNum + " " + word + " of beer");
    beerNum = beerNum - 1;
}