Попытка написать цикл for в java, но не может понять правильную логику

86
10

Я все еще изучаю основы Java, и у меня возникают проблемы с использованием логики цикла правильно. В настоящее время я создаю программу, которая печатает стихи песни "Пивная бутылка". Мой код работает правильно и завершен, однако моя логика ошибочна. Я уже пару дней общаюсь с этим циклом, и я все еще не уверен, как он будет выглядеть.

Цель программы - предложить пользователю узнать, сколько стилей песни "Бутылка пива" они хотят напечатать. Если пользователь вводит 2, должно появиться следующее:

100 bottles of beer on the wall

100 bottles of beer

If one of those bottles should happen to fall

99 bottles of beer on the wall

99 bottles of beer on the wall

99 bottles of beer

If one of those bottles should happen to fall

98 bottles of beer on the wall

Мой код выглядит так:

import java.util.Scanner;

public class BottleSong
{

public static void main (String [] args)
{
printBottleSongVerses ();
}

public static void printBottleSongVerses ()
{
int versesToPrint;
int verseNumber;
int state;
state = 0;
versesToPrint = 0;
verseNumber = 0;

String checkInt;
checkInt = null;

Scanner scan = new Scanner (System.in);

System.out.println ("This program prints verses of the 'One Hundred Bottles of Beer' song.");
System.out.println ("How many verses would you like to read?");

if (scan.hasNextInt())
{
versesToPrint = scan.nextInt();
state = 1;
}
else System.out.println("Error! This program only accepts integer values!");
if (state == 1)
{

if (versesToPrint <= 100)
{

for (; versesToPrint > 0 ; versesToPrint--)
{
verseNumber = 101 - versesToPrint;
System.out.println (verseNumber + " bottles of beer on the wall");
System.out.println (verseNumber + " bottles of beer");
System.out.println ("If one of those bottles should happen to fall");
System.out.println (verseNumber - 1 + " bottles of beer on the wall");
}
}
}

}
}

Теперь я знаю, что там есть ненужный код, но это потому, что я некоторое время играл с ним. Он работает, но он печатает стихи в обратном порядке. Если 3 - это вход, то консоль печатает 98, затем 99 и 100. Мне нужно, чтобы он печатался другим способом. Может ли кто-нибудь помочь в исправлении моей логики?

спросил(а) 2014-03-05T15:39:00+04:00 7 лет назад
1
Решение
61

Вы можете немного изменить подход и просто написать цикл вокруг числа стихов и изменить количество бутылок на стене.

int numberOfBottles = 100;
if (versesToPrint <= 100)
{
for (int i = 0; i < versesToPrint; i++)
{
System.out.println (numberOfBottles + " bottles of beer on the wall");
System.out.println (numberOfBottles + " bottles of beer");
System.out.println ("If one of those bottles should happen to fall");
System.out.println (numberOfBottles - 1 + " bottles of beer on the wall");
numberOfBottles--;
}
}

ответил(а) 2014-03-05T15:49:00+04:00 7 лет назад
43

Используйте переменную цикла:

for (int verseNumber = 100; verseNumber > 100 - versesToPrint; verseNumber--)

ответил(а) 2014-03-05T15:43:00+04:00 7 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема