Как использовать вложенные циклы While для отображения строк и столбцов в Java - PullRequest
1 голос
/ 11 марта 2020

Я пытаюсь получить следующий вывод:

Row 1 Col A
Row 1 Col B
Row 2 Col A
Row 2 Col B

У меня проблемы с вычислением логики c для выполнения этой задачи. До сих пор я придумал код, представленный ниже:

int iRowNum;
int iColLetter;

iRowNum = 1;
iColLetter = 65;

while (iColLetter < 67)
{

  System.out.println("Row " + iRowNum + " Col " + (char)iColLetter);

  iColLetter++;

  while (iRowNum < 3)
  {
    iRowNum += 1;
  }
}

К сожалению, я получаю вывод:

Row 1 Col A
Row 3 Col B

Начнем с того, что у меня есть ощущение, что я приближаюсь к где я должен быть, но я потратил немало времени, пытаясь выяснить логи c за желаемым результатом.

Последний вопрос Как отобразить строки и столбцы как показано в первом блоке этого поста?

Ответы [ 6 ]

1 голос
/ 11 марта 2020

Сделайте это следующим образом:

public class Main {
    public static void main(String[] args) {
        int iRowNum = 1;
        int iColLetter = 65;
        while (iRowNum < 3) {
            iColLetter = 65;
            while (iColLetter < 67) {
                System.out.println("Row " + iRowNum + " Col " + (char) iColLetter);
                iColLetter++;
            }
            iRowNum += 1;
        }
    }
}

Вывод:

Row 1 Col A
Row 1 Col B
Row 2 Col A
Row 2 Col B

Объяснение:

  1. Поскольку вы хотите от iRowNum до go до 2, вы начинаете с while (iRowNum < 3) или while (iRowNum <= 2).
  2. Для каждого значения iRowNum внутренний l oop имеет запускаться два раза, начиная с 65, т.е. вам нужно сбросить iColLetter до 65 до начала внутреннего l oop.
1 голос
/ 11 марта 2020

Вы перепутали порядок приращения. Это должно сделать работу:

iRowNum = 1;
iColLetter = 65;

while (iRowNum < 3) {
  for(int i = 0; i + iColLetter < 67; i++){
    System.out.println("Row " + iRowNum + " Col " + (char)(iColLetter + i));
  }
  iRowNum += 1;
}
0 голосов
/ 11 марта 2020

Ваш вывод содержит только две строки, которые означают, что программа не проникает во внутреннюю область, пока l oop печатается. Причина в том, что iColLetter = 65, и он увеличился до 57 и перестал идти внутрь, пока l oop. Таким образом, вы должны сбросить iColLetter = 65 во внешнем l oop. Посмотрите на пример

public class NestWhileLoop {
    public static void main(String [] args) {
        int iRowNum = 1;
        int iColLetter = 65;


        while (iRowNum < 3) {

            while (iColLetter < 67){

                System.out.println("Row " + iRowNum + " Col " + (char)iColLetter);

                iColLetter++;
            }
            iColLetter = 65;
            iRowNum ++;

        }

   }

}
0 голосов
/ 11 марта 2020

Я вставил ответ как можно ближе к вашему коду. Мне пришлось внести несколько небольших изменений - вы должны проанализировать каждое из них, чтобы понять тонкие различия каждой строки кода в том, как работают циклы, и как в некоторых случаях вам нужно повторно инициализировать переменные / реструктурировать циклы.

int iRowNum = 1;
int iColLetter = 65;

while (iRowNum < 3)
{    
  while (iColLetter < 67)
  {      
    System.out.println("Row " + iRowNum + " Col " + (char)iColLetter);//print alphabet for the given row
    iColLetter++;//increment the alphabet
  }
  iRowNum += 1;//row 1 printed, point to row 2
  iColLetter=65;//row 1 printed, reinitialize to start printing at A
}

  }
0 голосов
/ 11 марта 2020
    iRowNum = 1;
    iColLetter = 65;

    while (iRowNum < 3) {
        iColLetter = 65;
        while (iColLetter < 67) {

            System.out.println("Row " + iRowNum + " Col " + (char) iColLetter);

            iColLetter++;


        }
        iRowNum += 1;
    }

Выход

Row 1 Col A
Row 1 Col B
Row 2 Col A
Row 2 Col B
0 голосов
/ 11 марта 2020

Вы перебираете сначала строки, а затем столбцы. Вот почему вы не получаете желаемый результат. См. Следующее исправление в вашем коде:

iRowNum = 1;
while (iRowNum < 3)
{
   iColLetter = 65;
   while (iColLetter < 67)
   {  
      System.out.println("Row " + iRowNum + " Col " + (char)iColLetter);    
      iColLetter++;
   }    
   iRowNum += 1;
}
...