我写了一个类来打印模式:
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
循环的措辞中,我可以帮助识别它吗?
你只需要将第二个循环替换为:
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();
}
}
中使用 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();
}
}
}