3

さて、私はプログラミングクラスのプログラムを作成していて、それを取得しようとしているので、列と行を入力すると、乗算表を示す出力が得られます。これを視覚化するための例を次に示します: 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

かなり単純なものを見ているわけではないことはわかっていますが、なぜこれが起こっているのか理解できません。誰かが提案を提供できれば、それは大いに役立ちます。

ありがとう、サリー

4

5 に答える 5

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

これは、ループを説明する Oracle Java チュートリアルのセクションへのリンクです。コメントで等間隔について言及してくれたマイクforに感謝します。コードを更新しました。

于 2013-01-04T20:44:51.403 に答える
0

あなたがするとき

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

2回目は、forループの結果としてy=5です。したがって、2 * 5=10です。

于 2013-01-04T20:42:32.740 に答える
0

4 行を取得する場合は、行、1、2、3、および 4 を表示します。(<= 4 ではなく) < 4 でループを停止すると、最後の行と列が失われます。これは人々がフェンスポスト エラーと呼んでいるものです。

次のようにしてみてください:

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

また、まだ適切な y 値を持っていない最初の印刷。x と y の両方を有効にする必要があるため、内側のループ内でのみ出力します。

于 2013-01-04T20:46:17.500 に答える
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();   
}   

最初の print() は不要です。比較を変更して、rowcolumnがそれぞれ x と y の有効な値になるようにする必要があります (つまり、<=ではなく使用され<ます。また、"\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  
于 2013-01-04T20:46:29.310 に答える
-2

1つ目は、前のforループprintの値を使用しているため間違っています。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ベースであるため)。上記のフラグメントで更新しました。

于 2013-01-04T20:42:47.187 に答える