【问题标题】:For loop not counting correctly, counting from wrong variable somehow? [closed]For循环计数不正确,以某种方式从错误的变量计数? [关闭]
【发布时间】:2012-12-19 07:56:26
【问题描述】:

好的,我正在为我的编程课程制作一个程序,我正在尝试获取它,所以当我输入列和行时,它会得到一个显示乘法表的输出。下面是一个可视化的示例: printTable(4,6) 的示例运行输出:

现在,这是我的代码:

 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

我知道我没有看到相当简单的事情,但我只是不明白为什么会发生这种情况。如果有人可以提供建议,那将有很大帮助。

谢谢, 苏利

【问题讨论】:

  • 您应该在调试器中单步执行您的代码,并在执行过程中检查所有变量的值。
  • 为什么要在第二个循环之外打印 x*y?
  • Hot licks,很抱歉我的问题冒犯了你。请考虑到我是一名 10 年级的编程新手。
  • 如果您遵循仅在需要时声明变量并同时初始化它们的最佳实践,您就不会出现此错误。
  • @JBNizet 我最初确实在 for 循环中初始化了变量,例如:“for (int x = 0.........)”但我想我会尝试一些新的解决方法

标签: java for-loop increment


【解决方案1】:

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

要修复它,请删除这些行:

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

这里有一个 link 到 Oracle Java 教程解释 for 循环的部分。 感谢Mike 提到 cmets 中的均匀间距。更新了代码。

【讨论】:

  • 你的答案是正确的,但有一个小错误。您应该将 System.out.print(x * y + " ") 更改为 System.out.print(x + " "),因为 y 是未定义的。
  • 谢谢你!它在大多数情况下都有效。您没有错,但它只打印 4 行而不是我输入的 5 行。我应该将 x 和 y 设置为 0 吗?
  • 不,由于乘法,这会在输出中产生 0。将条件中的&lt;(较小)替换为&lt;=(小于或等于)
  • 好的,非常感谢。成功了!
  • 如果您希望获得示例中显示的均匀间距,您还需要将System.out.print(y * x + " "); 更改为System.out.print(y * x + "\t");
【解决方案2】:
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();   
}   

第一个 print() 是不需要的,您需要更改比较,以便 rowcolumn 分别是 x 和 y 的有效值(即使用 &lt;= 而不是 &lt;。另外,您将希望使用"\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    

"\t" 输出 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  

【讨论】:

    【解决方案3】:

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

    更新:循环结束也是&lt;,而它们应该是&lt;=(因为它们是从1开始的)。我在上面的片段中更新了它。

    【讨论】:

    • 我明白了,由于&lt;,您正在跳过最后一行。我会更新上面的代码。
    【解决方案4】:

    如果您想获得 4 行,则需要显示行、1、2、3 和 4。如果您在 fencepost error 。

    试试这样的:

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

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

    【讨论】:

      【解决方案5】:

      当你做的时候

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-06
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 2021-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多