Есть миллион решений этой проблемы, но я бы сказал, что когда вы видите проблему, сначала попробуйте разбить ее на более мелкие проблемы, которые вы понимаете, как их решить.
Часть 1: Переменные строки
Как вы можете определить, должна ли строка печатать * * * * *
или * * * *
? Ну, на данный момент предположим существование булева, которая может сказать вам, какой из них нужно печатать. Когда у вас есть это логическое значение, оставшаяся часть этой проблемы становится легкой, не так ли?
if (shouldPrintFiveStars) {
System.out.println("* * * * *");
} else {
System.out.println(" * * * * ");
}
Часть 2: Создание вашего цикл
Теперь блок, который мы имеем выше (опять же, если предположить существование shouldPrintFiveStars
булевых) будет правильно напечатать пять звезд или четыре звезды на линии. Чтобы напечатать несколько строк, нам просто нужно создать цикл:
for (int i = 0; i < 4; i++) {
// Let's insert the code we did in part 1.
if (shouldPrintFiveStars) {
System.out.println("* * * * *");
} else {
System.out.println(" * * * * ");
}
}
Часть 3: заканчивал
код, который мы имеем до сих пор должны работать; мы настроили его на чередующиеся строки и прокручиваем четыре раза. Единственная проблема? Мы все время предполагаем существование этой переменной shouldPrintFiveStars
. Нам нужно определить, что для этого нужно работать. Еще раз, есть несколько способов сделать это.
Наиболее распространенный подход, вероятно, будет использовать modulo operator для расчета следует ли печатать пять звезд:
for (int i = 0; i < 4; i++) {
// We can replace the condition that we had here previously with modular division.
if (i % 2 == 0) {
System.out.println("* * * * *");
} else {
System.out.println(" * * * * ");
}
}
Если вы не знакомы с модульной арифметикой и не хотите, чтобы узнать его (вы действительно должны , это очень полезно), то вы можете просто сделать это, переключая один булево в каждой итерации цикла:
// Initialize this to true, since the first row should have five stars; initialize it
// outside the loop, so that its value can be referenced in each subsequent iteration.
boolean shouldPrintFiveStars = true;
for (int i = 0; i < 4; i++) {
if (shouldPrintFiveStars) {
System.out.println("* * * * *");
} else {
System.out.println(" * * * * ");
}
// We do this inside the loop, since it needs to change on every iteration.
shouldPrintFiveStars = !shouldPrintFiveStars;
}
Пробовали ли вы что-нибудь с для цикла? Может ли шаблон быть выше или шире? Существуют ли другие требования? – csmckelvey
Я полагаю, что это упражнение: вы должны рассматривать каждую строку отдельно и каждый * один и делать что-то вроде: for (...) {System.out.print (...);}. Подсказка: вам нужно вложить два 'for' –
Что особенного в этом шаблоне? –