java - 我很困惑为什么我的程序没有循环和打印

标签 java oop loops

程序刚刚输出了歌曲《九十九瓶啤酒上墙》。它编译时没有错误,但我的代码中没有任何反应。我认为这与我如何设置最后两个方法的参数以及我的实例变量有关,但我在理解这一点时遇到了一些困难。

package beersong;

public class BeerSong

{
    private int numBeerBottles;
    private String numberInWords;
    private String secondNumberInWords;
    private int n;

    private String[] numbers = {"", "one", "two", "three", "four", "five", 
        "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
        "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"
    };

    private String[] tens = {"", "", "Twenty", "Thirty", "Forty", "Fifty",
        "Sixty", "Seventy", "Eighty", "Ninety" 
    };

    //constructor
    public BeerSong (int numBeerBottles)
    {
        this.numBeerBottles = numBeerBottles;
    }

    //method to return each line of song
    public String convertNumberToWord(int n)
    {
        if(n<20)
        {
            this.numberInWords = numbers[n];
        }

        else if (n%10 == 0)
        {
            this.numberInWords = tens[n/10];
        }

        else 
        {
            this.numberInWords = (tens[(n - n%10)] + numbers[n%10]);
        }

        return this.numberInWords;
    }

    //method to get word for n-1 beer in song
    public String getSecondBeer(int n)
    {
        if((n-1)<20)
        {
            this.secondNumberInWords = numbers[(n-1)];
        }

        else if ((n-1)%10 == 0)
        {
            this.secondNumberInWords = tens[(n-1)/10];
        }

        else
        {
            this.secondNumberInWords = (tens[((n-1) - (n-1)%10)] + numbers[(n-1)%10]);
        }
        return this.secondNumberInWords;
    }

    //method to actually print song to screen
    public void printSong()
    {
        for (n=numBeerBottles; n==0; n--)
        {
        System.out.println(convertNumberToWord(n) + " bottles of beer on the "
                + "wall. " + convertNumberToWord(n) + " bottles of beer. "
                + "You take one down, pass it around "
                + getSecondBeer(n) + " bottles of beer on the wall");
        System.out.println();
        }
    }

    public static void main(String[] args) 
    {
        BeerSong newsong = new BeerSong(99);
        newsong.printSong();
    }
}

最佳答案

首次运行时,循环条件不太可能为真:

for(n=numBeerBottles; n==0; n--)

也就是说,为了执行循环,n 必须是 0 这似乎不正确,因为你正在背诵“墙上有N瓶啤酒”。

您打算编写的是 n 必须大于或等于 0。

for(n = numBeerBottles; n >= 0; n--)

关于java - 我很困惑为什么我的程序没有循环和打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19174726/

相关文章:

ios - 从父类(super class) iOS swift 中识别子类

loops - VBscript错误处理-移至 “For Each”循环中的下一项

javascript - 宏 |登录并循环(第二次循环)

javascript - 排序数组中缺少整数

java - 使用递归将数组转换为自定义 LinkedList 类

java - 高级 for-each header (对于元素 : method_returning_array())?)内的方法调用的任何已知负面影响

java - HTML 到 ODT – XSLT?

oop - 这种方法属于哪里?

Java 充气城堡 : Invalid point encoding 0x45

java - 为什么 Java 和 C# 将 main 函数放在类中?