嵌套循环模式不起作用



我写了一个类来打印模式:

1
2   4
3   6   9
4   8   12  16
5   10  15  20  25

代码为:

public class pat2
{
    public void method()
    {
        int row = 1;
        int val = 0;
        for(row=1;row<=5;row++)
        {
            for(val=1;val<=row;val=row*val)
            {
                System.out.print(val);
            }
            System.out.println();
        }
    }
}

我发现rowval之间的关系就是val = row*val.使用这个逻辑,我编写了嵌套循环。但是,我没有得到所需的输出,而是得到了无限1的输出。我很肯定我的问题出在第二个for循环的措辞中,我可以帮助识别它吗?

你只需要将第二个循环替换为:

for(val = 1; val <= row; val++) {
    System.out.print( val * row + "t" );
}
你不能在

注册阶段val=row*val这样做。这将溢出所有预期的算法边界。

我相信这就是你想要的:

for(val=1;val<=row;val++)
{
    System.out.print(val*row);
}
public class Pat2 { //class names start with a capital letter
    public void method(){
        for(int row = 1; row <= 5; row++){
            for(int col = 1; col <= row; col++)
                System.out.print(row*col + "t");
            System.out.println();
        }
    }
}

在你第二个 for 循环中,for(val=1;val<=row;val=row*val)。

val=row*val 使代码处于无限循环中,它不会结束。

您应该使用以下代码,例如,

public void method() {
    int row = 1;
    int val = 0;
    for (row = 1; row <= 5; row++) {
        for (val = 1; val <= row; val++) {
            System.out.printf("%2d ", row * val);
        }
        System.out.println();
    }
}

控制台中的输出如下:

1 
2  4 
3  6  9 
4  8 12 16 
5 10 15 20 25 

你很接近。内部循环 您确实希望按行递增值,但您不想将循环计数器增加太多。我将你的"val"变量重命名为"col",我认为发生了什么更清楚:

public class pat2
{
    public void method()
    {
        int row = 1;
        int col = 1;
        for(row=1;row<=5;row++)
        {
            for(col=1;col<=row;++col)
            {
                System.out.print(col*row);
            }
            System.out.println();
        }
    }
}

所以你的问题是你说:

for(val=1;val<=row;val=row*val)

考虑一下你在这里说的话。

Val = 1。

只要 val <= 行

val = row*val。

因此,如果值 = 任何大于 1 的数字,这应该会中断。

试试这个:

public void method()
{
    for(int row=1; row<=5; row++)
    {
        for(int val=1; val<=row; val++)
        {
            System.out.print(val * row);
        }
        System.out.println();
    }
}
在 for 循环

中使用 val=val*row 是对如何使用 for 循环的一个很大的误解。 您希望循环计数器以一致的计数递增。 如果您在纸上跟踪当前解决方案,您将看到 val 将始终为 1。 因此,它永远不会离开循环,并且始终会打印出"1"

您可以按以下方式修复代码:

public class pat2
{
    public void method()
    {
        for(int row=1; row<=5; row++)
        {
            for(int column=1; column<=row; column++)
            {
                System.out.print(row * column);
            }
            System.out.println();
        }
    }
}

最新更新