对于JAVA:只使用for循环编写一个嵌套循环,显示21个整数(0-9),并从下一行停止的地方开始?

wpx232ag  于 2023-01-11  发布在  Java
关注(0)|答案(2)|浏览(149)
  • 请用基本术语解释,只使用for循环 * 这更多的是一个数学问题,而不是一个编码问题,我知道有一个简单的if语句很容易解决这个问题,但我很好奇它如何只使用for循环。

问题在于编写一个名为printNumberSlide的方法,该方法由一个嵌套循环(一个内部循环和一个外部循环)组成。
内部循环应该打印21次每次打印0到9之间的数字。
数字应按顺序打印,然后从9之后的0重新开始。
当内部循环结束时,在下一行,它应该从上一行停止的地方开始打印。
另外,我认为外部循环根据行数控制每行。
这是我的可编译但根本不能工作的代码。
我会喜欢任何和所有的解释,也请让我知道,如果你需要更多的信息。

public class NumberSlide {
    public static void main(String[] args) {
        printNumberSlide(11);
    }

    private static void printNumberSlide(int row) {
        for (int line = 0; line < row; line++) {
            for (int num = line % 10; num <= num % 10; num++) {
                System.out.print(num);
            }
            System.out.println();
        }
    }
}
qojgxg4l

qojgxg4l1#

下面的代码将迭代内部循环21次,每次都以(j +(i21))为模,因为i实际上代表了内部循环的21次迭代,所以i本质上是一个跟踪器,用来跟踪j总共发生了多少次迭代。
我之前写的使用j+i的代码可以工作,虽然我不知道为什么。我不小心漏掉了(i
21),所以我很惊讶它仍然工作得很好。

public static void nestedPrint(int row)
        {
            for (int i=0; i< row; i++)
            {
                for (int j=0; j< 21; j++)
                {
                    System.out.print((j+(i*21)) % 10+" ");
                }
                System.out.println();
            }
        }

当使用row = 5调用时,将给出输出:

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
mzmfm0qo

mzmfm0qo2#

如果内层循环打印21个数字,那么我会说从0到20迭代,你可以忽略这些迭代,基本上只是在两个循环之外保留一个数字,在打印之后递增它并计算模10,外层循环基本上只是添加换行符。
大概是这样的

private static void printNumberSlide(int row) {
  int num = 0; //start with 0
  for(int r = 0; r < row; r++) { //loop over the rows
    for( int c = 0; c < 21; c++) { //21 iterations per row
      System.out.print(num); //print the number
      num = (num + 1) % 10; //calculate the next number: add 1, mod 10 so (9+1)%10 = 0 etc.
    }
    System.out.println(); //print the line break
  }
}

注意,num是在两个循环之外定义的,也就是说,它只在定义它的作用域中可见,也就是printNumberSlide()方法。如果你把它移到外部循环中,那么你基本上是在每一行重新定义它,从而重置值。这基本上是内部循环所做的,只是把作用域再缩小一点。
注意:这里通过保持一个不断递增的数字来精确地获取“最后一行结束的地方”。还有其他方法可以从行和列信息中产生结果(见其他答案),所以选择最适合你的方法:)

相关问题