对于循环计数不正确,以某种方式从错误的变量计数?

时间:2013-01-04 20:38:00

标签: java for-loop increment

好的,我正在为我的编程类创建一个程序,我正在尝试这样做,所以当我输入列和行时,它将得到一个显示乘法表的输出。下面是一个可视化示例:printTable(4,6)的示例运行输出:

Example:

现在,这是我的代码:

 import java.util.Scanner;

 public class Pictures {

public static int row;
public static int column;
public static Scanner input = new Scanner(System.in);

public static void main(String[] args){
int x = 1;
int y = 1;

System.out.println("Input Row: ");
row = input.nextInt();
System.out.println("Input Column: ");
column = input.nextInt();

for(x = 1; x < row; x++){
    System.out.print(x * y +  "    ");

    for(y = 1 ; y < column; y++){

        System.out.print(y * x + "    ");
    }
    System.out.println();   
}   
}
}

现在,当我输入第5行和第5列时,我的输出如下所示:

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

我知道我没有看到一些相当简单的东西,但我只是不明白为什么会这样。如果有人可以提出建议,那将会有很大帮助。

谢谢, 玷污

5 个答案:

答案 0 :(得分:4)

出于学习目的,请使用调试器来理解您的代码。

要解决此问题,请删除以下行:

int x = 1;
int y = 1;

并让你的循环像:

for(int x = 1; x < row; x++){
    // System.out.print(x * y +  "    "); // no print needed here
    for(int y = 1 ; y < column; y++){
        System.out.print(y * x + "\t");
    }
    System.out.println(); 
}  

以下是解释for循环的Oracle Java教程部分的link。 感谢Mike提及评论中的均匀间距。更新了代码。

答案 1 :(得分:0)

当你这样做时

System.out.print(x * y +“”);

第二次,由于for循环,y = 5。因此2 * 5 = 10。

答案 2 :(得分:0)

如果你想获得4行,你想要显示行1,2,3和4.如果你停止你的循环在&lt; 4(而不是&lt; = 4)你会错过最后一行和列。人们称之为fencepost error

尝试这样的事情:

for(int x = 1; x <= row; x++)

此外,第一张打印件还没有良好的y值。您希望x和y都有效,因此只能在内循环内打印。

答案 3 :(得分:0)

for(x = 1; x < row; x++){
    System.out.print(x * y +  "    ");
    for(y = 1 ; y < column; y++){
        System.out.print(y * x + "    ");
    }
    System.out.println();   
}   

第一次打印()是不必要的,您需要更改比较,以便rowcolumn分别是x和y的有效值(即使用<=而不是{ {1}}。此外,您还需要使用<(制表符)来隔开列,而不是"\t",以便具有不同位数的数字不会导致列歪曲。这应该产生预期的结果。

"     "

使用for(x = 1; x <= row; x++){ for(y = 1 ; y <= column; y++){ System.out.print(y * x + "\t"); } System.out.println(); } ...

输出4,6
"    "

使用1 2 3 4 5 6 2 4 6 8 10 12 3 6 9 12 15 18 4 8 12 16 20 24 ...

输出4,6
"\t"

答案 4 :(得分:-2)

第一个print错误,因为它使用了前一个for循环的y值。

将其更改为:

for(x = 1; x <= row; x++){
  System.out.print(x +  "    ");
  for(y = 1 ; y <= column; y++){
    System.out.print(y * x + "    ");
  }
  System.out.println();
}

更新:循环结束也是<,而它们应该是<=(因为它们是基于1的)。我在上面的片段中更新了它。