0

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

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();
        }
    }
}

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

4

7 回答 7

1

您不能val=row*val在增量阶段执行此操作。这将溢出所有预期的算法界限。

我相信这就是你想要的:

for(val=1;val<=row;val++)
{
    System.out.print(val*row);
}
于 2013-11-11T16:15:49.213 回答
1

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

for(val = 1; val <= row; val++) {
    System.out.print( val * row + "\t" );
}
于 2013-11-11T16:16:33.747 回答
1
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();
        }
    }
}
于 2013-11-11T16:16:44.687 回答
1

在你的第二个 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 
于 2013-11-11T16:23:10.503 回答
0

你很近。您确实希望逐行增加您的值的内部循环,但您不想增加循环计数器那么多。我将您的“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();
        }
    }
}
于 2013-11-11T16:15:36.317 回答
0

在你的 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();
        }
    }
}
于 2013-11-11T16:19:32.390 回答
0

所以你的问题是你说:

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

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

值 = 1。

只要 val <= row

val = 行*val。

因此,如果 value = 任何大于 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();
    }
}
于 2013-11-11T16:17:23.393 回答