2016-11-30 1 views
0

Если у меня есть n чисел, а максимальное число равно 6, а максимальная буква - F, то что это лучший способ сделать это.Вложенный шаблон петли

A1 
A2 
A3 
A4 
A5 
A6 
B1 
B2 
etc.. 

int numList = 36; 

     char letter; 

     for (int i=1; i<=36; ++i){ 
      int a = numList/6; 
      letter = 'A'; 
      for (int j=0; j<= a; j++){ 
      System.out.println(letter +"" + i); 
      letter++; 
      } 
    } 
+1

Что вы должны сделать с этим? – pikrut

+2

Лучший способ сделать это [просто сделать это] (https://www.youtube.com/watch?v=ZXsQAXx_ao0). – Gendarme

+0

@Gendarme Истерический +1 –

ответ

0

Когда у вас есть вложенный цикл, весь внутренний цикл вместе с остальной частью тела внешнего цикла запускается каждый раз, когда выполняется внешний цикл.

Здесь каждый раз, когда вы запускаете внутренний for, тело внутреннего цикла выполняется 6 раз, что означает, что вы печатаете 6 строк.

Итак, как вы его написали: внешняя петля выполняется 36 раз, а каждый раз, когда пробегает внешний цикл, внутренний цикл выполняется 6 раз. Это означает, что внутренний цикл выполняется в сумме 36 * 6 = 216 раз, в результате чего печатается 216 строк. Это не то, что вы хотите. Вы хотите, чтобы внешний цикл работал всего 6 раз, поэтому ваш первый for должен измениться.

Другая особенность вложенных циклов: внутренний цикл повторяется быстрее, чем внешний контур. Поэтому в вашем случае, когда выполняется первая итерация внешнего цикла, внутренний цикл выполняется 6 раз. Затем переходим к следующей итерации внешнего цикла, а внутренний цикл выполняет еще 6 раз; только , то мы выполняем внешний цикл в третий раз и т. д.

В соответствии с желаемым результатом вы должны изменить цифру быстрее, чем буква. Это означает, что цифра должна быть увеличена на 1 во внутреннем цикле, а буква должна быть увеличена во внешнем контуре. Вы делаете это назад, хотя - вы увеличиваете букву во внутреннем цикле и цифру (i) во внешнем цикле.

Я не хочу давать вам код. Надеюсь, я дал вам достаточно информации, чтобы вы могли исправить это самостоятельно.Попробуйте сделать это, прежде чем смотреть на код, который вам дали другие.

+0

Большое вам спасибо. Я прочитаю больше о вложенном цикле. –

1

Это будет код:

int[] array_of_ints; // declare and add the values into it - 1-6 
    String[] array_of_alphabtes; // declare and add the values into it - A-F 

    for (int i = 0; i < array_of_alphabtes.length; i++) { 
     for (int j = 0; j < array_of_ints.length; j++) { 
      System.out.println(array_of_alphabtes[i] + "" + array_of_ints[j]); 
     } 
    } 
+0

Мне нравится этот ответ, потому что он явно указывает, что используется для построения каждой «цифры», которую хочет OP. –

2

Короче:

public static void main(String[] args) { 
     for (int i = 0; i < 6; i++) { 
      char c = (char) (i + 65); 
      for (int j = 1; j <= 6; j++) { 
       System.out.println("" + c + j); 
      } 
     } 
    } 

В Long:

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

Самое важное умение при решении проблемы - разбить небольшую проблему. Во-первых, вы видите, что выход: A1 A2 A3 ... B1 B2 B3 .. Похоже, вы можете разбить каждую строку (например: A1) на 2 части: первая часть от A до F и вторая часть от 1 до 6. Это хорошо известная шаблон для применения двух вложенных циклов. Вот псевдокод:

public static void main(String[] args) { 
    for (char c = A to F) { 
     for (int j = 1; j <= 6; j++) { 
      System.out.println("" + c + j); 
     } 
    } 
} 

Вы видите это. первый цикл не является истинным (синтаксис грамматики). Итак, мы должны узнать новое: char в Java - это целое число. (это верно для большинства языков, таких как C#, javascript ...), но не для всех. Поэтому я ищу ascii table здесь. Я вижу, что A до F начинается с 65, 66, 67, ... Поэтому я могу начать цикл с 6 элементами. Каждый элемент добавить в 65. Например:

0 -> 65 -> A 
1 -> 66 -> B 
2 -> 67 -> C 

И, как вы догадываетесь, он стал моим окончательным код, который я написал выше. Надеюсь, что это вам поможет :)

+0

, пожалуйста, просмотрите мой обновленный ответ. Я думаю, это поможет вам улучшить навыки мышления. – hqt

1

Изменить код так:

int numList = 36/6; 
    char letter = 'A'; 
    for (int i = 1; i <= numList; ++i) { 
     for (int j = 1; j <= numList; j++) { 
      System.out.println(letter + "" + j); 
     } 
     letter++; 
    } 
+0

Thanksssssssss. –