Вложенный для печати цикла вывода и форматирования неверной таблицы, это все фанк - PullRequest
2 голосов
/ 22 марта 2019

Таким образом, цель состояла в том, чтобы использовать вложенный цикл for для вывода 6 строк и 10 столбцов. Дело в том, что внутренний цикл for должен был проверять, было ли число четным или нечетным, поскольку, если бы оно было четным, мы добавили бы к нему 2, а затем распечатали это число 10 раз, прежде чем перейти к следующему выводу. Так что это то, что должны были получить

1 1 1 1 1 1 1 1 1 1  
4 4 4 4 4 4 4 4 4 4  
3 3 3 3 3 3 3 3 3 3   
6 6 6 6 6 6 6 6 6 6  
5 5 5 5 5 5 5 5 5 5  
8 8 8 8 8 8 8 8 8 8 

Я думал, что был на правильном пути, но мой вывод - полный беспорядок, вот что у меня есть. Спасибо всем, кто хочет помочь.

for (int numberE = 1; numberE <= 6; numberE++)
{
    for (int nestedE = 1; nestedE < 10; nestedE++)
    {
        if (numberE%2 == 0)
        {
            numberE += 2;
            System.out.printf("%2d", numberE);
        }   else {
              System.out.printf("%2d", numberE);
        }
    }
    System.out.printf("%2d\n", numberE);
}

Ответы [ 4 ]

1 голос
/ 22 марта 2019

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

Проблема с вашим решением состояла в том, что вы изменяли значение numberE, используя numberE += 2; внутри второго цикла for, это изменяет значение глобально.

Перемещение последнего столбца во вложенные циклы for также облегчает задачу, поскольку вам не нужно определять временную переменную вне цикла. Использование этого также означало изменение <10 на <=10.

for (int numberE = 1; numberE <= 6; numberE++) {
   for (int nestedE = 1; nestedE <= 10; nestedE++) {
     int current = (numberE % 2 == 0) ? numberE + 2 : numberE;
     System.out.printf("%2d", current);
   }
System.out.printf("\n");
}

Вы были довольно близки, хотя, с практикой вы поправитесь.

1 голос
/ 22 марта 2019

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

0 голосов
/ 22 марта 2019

Я бы сделал это так.Дает требуемый результат.

public class NestedForLoop {

public static void main(String[] args) {
    for (int i = 1; i <= 6; i++)
    {
        int temp = i;
        if(temp%2 == 0) {
            temp +=2;
        }
        for(int j=1;j<=10;j++) {
            System.out.print(temp+" ");
        }
        System.out.println();
    }
}

}

Краткое описание того, что здесь происходит: Итак, поскольку нам нужно 6 строк, мы используем значение 6 в качестве счетчика строк.Переменная i заботится о сохранении количества строк.Здесь, поскольку цель равна 6, мы начинаем с строки № 1 и переходим к строке № 6. Внутри каждого значения цикла мы сохраняем значение i в temp, потому что не хотим, чтобы значение i изменялось до увеличения восновной цикл.Затем мы проверяем, является ли это временное значение четным, выполняя деление по модулю на 2. Если оно четное, мы увеличиваем временное значение на 2.
Затем мы запускаем цикл от 1 до 10, поскольку нам нужно 10 столбцов для печати.значение temp (либо оригинал i, либо увеличенный, потому что он был четным).После выхода из цикла, чтобы наконец перейти к следующей строке, мы делаем System.out.println ().

0 голосов
/ 22 марта 2019

Не изменяйте число E внутри циклов.Вместо этого просто напечатайте число E + 2.

Кроме того, если ваш внутренний цикл работает от 0 до <10, вы получите 10 итераций, и вам не нужно снова печатать число - просто новая строка. </p>

for (int numberE = 1; numberE <= 6; numberE++)
{
    for (int nestedE = 0; nestedE < 10; nestedE++) // <-- start at 0 and end <10 for 10 iterations
    {
        if (numberE%2 == 0)
        {
            System.out.printf("%2d", numberE + 2); // <-- print the number + 2
        } else {
            System.out.printf("%2d", numberE);
        }
    }
    System.out.println(); // <-- don't print the value again here
}
...