public class BeerSong {
    public String verse(int number) {
        switch (number) {
            case 0:
                return "No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n\n";
            case 1:
                return "1 bottle of beer on the wall, 1 bottle of beer.\nTake it down and pass it around, no more bottles of beer on the wall.\n\n";
            case 2:
                return "2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n\n";
            default:
                return String.format("%d bottles of beer on the wall, %d bottles of beer.\nTake one down and pass it around, %d bottles of beer on the wall.\n\n", number, number, number - 1);
        }
    }

    public String sing(int start, int stop) {
        StringBuilder songOutput = new StringBuilder();

        for (int i=start; i>=stop; i--) {
            songOutput.append(verse(i));
        }

        return songOutput.toString();
    }

    public String singSong() {
        return sing(99,0);
    }
}
class BeerSong {
    String verse(int number) {
        switch (number) {
            case 0:
                return "No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n\n";
            case 1:
                return "1 bottle of beer on the wall, 1 bottle of beer.\nTake it down and pass it around, no more bottles of beer on the wall.\n\n";
            case 2:
                return "2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n\n";
            default:
                return String.format("%d bottles of beer on the wall, %d bottles of beer.\nTake one down and pass it around, %d bottles of beer on the wall.\n\n", number, number, number - 1);
        }
    }

    String sing(int start, int stop) {
        StringBuilder songOutput = new StringBuilder();

        for (int i=start; i>=stop; i--) {
            songOutput.append(verse(i));
        }

        return songOutput.toString();
    }

    String singSong() {
        return sing(99,0);
    }
}
update reference solution to package-private