2014-11-29 3 views
-3

Мне нужно создать следующий шаблон, используя цикл.Как создать цикл для печати следующего шаблона?

* * * * * 
* * * * 
* * * * * 
* * * * 

Теперь я могу только сделать это, просто system.out.print заявление. Я не знаю, как построить это с циклом for.

Мой код:

package pattern; 

public class Pattern { 

    public static void main(String[] args) { 

     System.out.println("* * * * *"); 
     System.out.println(" * * * *"); 
     System.out.println("* * * * *"); 
     System.out.println(" * * * *"); 
    } 

} 
+1

Пробовали ли вы что-нибудь с для цикла? Может ли шаблон быть выше или шире? Существуют ли другие требования? – csmckelvey

+0

Я полагаю, что это упражнение: вы должны рассматривать каждую строку отдельно и каждый * один и делать что-то вроде: for (...) {System.out.print (...);}. Подсказка: вам нужно вложить два 'for' –

+0

Что особенного в этом шаблоне? –

ответ

0

Это просто "печать шашка доска вопрос". Вы должны использовать вложенный цикл, чтобы сделать это:

int row = 5, col = 5; 
    for(int x=0; x<row; x++) 
    { 
     for(int y=0; y<col; y++) 
      if (x % 2 == 0) 
       System.out.print("* "); 
      else 
       System.out.print(" *");  
     System.out.println(""); 
    } 

С таким вопросом, вы должны не печатают «*» с помощью System.out.print ("* * * *"). Распечатайте повторяющиеся "*" с использованием петель.

0

Try:

for (int i =0; i<10; i++) { 
     System.out.println("* * * * *"); 
     System.out.println(" * * * *"); 
} 
+1

Мы не знаем, предназначено ли это упражнение для иллюстрации состояния внутри itereation или вложенных итераций. Я предлагаю вам предложить альтернативу с двумя вложенными. –

+0

Что вы предлагаете попробовать и ответить на то, что вы чувствуете;) – SMA

0

Пожалуйста, попробуйте следующее:

for(int i = 0; i < 10; i++){ 
    System.out.println("* * * * *"); 
    System.out.println(" * * * *"); 
} 
1

Есть миллион решений этой проблемы, но я бы сказал, что когда вы видите проблему, сначала попробуйте разбить ее на более мелкие проблемы, которые вы понимаете, как их решить.

Часть 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; 
} 
+0

В качестве примечания, я думаю, что вопросы, которые [Takendarkk] (http://stackoverflow.com/users/3081206/takendarkk), упомянутые в первоначальном вопросе, являются важными соображениями , даже если это явно не требуется в вашей ситуации. Я намеренно не отвечаю им здесь. Вы должны взять это как упражнение на себя, чтобы понять, как расширить такое решение. Что делать, если столбцов больше? Что, если он чередуется между строками с 4, 5 и 6 звездами? и т. д. –

0

Попробуйте это:

package pattern; 

public class Pattern { 

    public static void main(String[] args) { 
     for (int increment =0; increment<4; increment++) { 
      if (increment%2 == 0) { 
       System.out.println("* * * * *"); 
      } else { 
       System.out.println(" * * * *"); 
      } 

     } 

    } 

} 
1

Другой возможный рабочий раствор с минимальными кодами:

int size = 5; 
    for(int x=0; x<size; x++){ 
     for(int y=0; y<(size-x%2); y++) 
      System.out.print(x % 2 == 0?"* ":" *"); //Inline if   
     System.out.println(""); 
    } 

Программа выхода:

* * * * * 
* * * * 
* * * * * 
* * * * 
* * * * * 

Объяснение: печать "* " если строка даже номер строки. Печать " *" - текущая строка - строка нечетного числа.

+0

ваши нечетные строки - 1 звезда слишком долго. Шаблон в вопросе чередуется между 4 и 5 звездами – zapl

+0

@zapl На самом деле это можно легко решить, изменив y <5 на что-то еще, и я подозреваю, что сам OP сам может захотеть 5 стартов и в нечетных строках. – user3437460

+0

@zapl Смотрите, он работает сейчас. ;) – user3437460

0

простая логика только попробовать это именно тот образец

class Format1 { 
    public static void main(String args[]){ 
     int r,c; 
     for(r=0;r<7;r++) 
     { 
      for(c=0;c<7;c++){ 
       if ((r%2==0)&&(c%2==0)) 
        System.out.print("*\t"); 
       else if ((r%2!=0)&&(c%2!=0)) 
        System.out.print("*\t"); 
       else 
        System.out.print("\t"); 
      } 
       System.out.println(); 
     } 
    } 
} 
Смежные вопросы