2016-11-16 16 views
0

2つの行列の要素を受け取り、これらの2つの行列の積を出力するプログラムを構築したいと思います。私はこれまで少し実験し、行列を作成し、 "readInts" - マニュアルを使用しました。まず、プログラムが実際にユーザーが入力した要素を受け取っていることを確認したいので、最初の行列を全体として印刷したいと思っています。これは、このコードに含まれています:2次元配列/行列の長さ

int rows = readInt("Number of rows: "); 
int columns = readInt("Number of columns: "); 
int [][] m = new int[rows][columns]; 
int [] elements = readInts("Please type in the elements: "); 

for(int = 0; i < m.length; i++) { 
print(elements[i], 5); 
} 

さて、私はまだ理解していなかったことは、私が「m.length」を解釈しなければならない方法です。少しのテストの後、私はそれが行の数を参照することを知ったので、例えば私が3行を定義し、1,2,3,4,5という数字をタイプすると、私は1,2,3プログラムは残りの部分をカットします。彼は実際には列の数を参照することになっていると思いますので、mを定義すると[行]と[列]を切り替える必要がありますが、常に行の数を最初に指定するので、直観に反します。また、遅かれ早かれ、それ以降に他の問題が発生するかどうかはわかりません。では、最初に[行]と[列]を切り替えることなくこれを行う別の方法がありますか?

+0

'readInt'と' readInts'とは何ですか?これらは標準Javaメソッドではありません... – assylias

+0

ああ、私はそれを知らなかった。 「readInt」は整数を読み込み、「readInts」は複数の整数を1つずつ読み込みます。これらの要素を印刷すると、最初から同じ行にあります。 – Julian

+0

これ以上行く前に1つ知っておくべきです。そのような2次元配列を作成する場合、その配列は必ずしもmatriceと等価ではありません。特に、コンソールの行から配列などを塗りつぶしている場合は、2次元配列は単純に配列型の配列であり、注意しないと各配列の長さが異なることがあります。 – halil

答えて

1

あなたは行と列を知っているので、2つのループを行うことができます。

int rows = readInt("rows"); 
int columns =readInt("columns"); 
int [][] m = new int[rows][columns]; 
for (int i = 0; i < rows; i++) { 
    int n[]=readInts("enter 3 numbers:"); 
    for (int k = 0; k < columns; k++) { 
     m[i][k] = n[k]; 
    } 
} 

私が行ったようにスキャナを使用する必要はありません(ここでは正しく動作していません)。それでも 文字列を正しく読み取れば、望ましい結果が得られるはずです

+0

これは、 "スレッドでの例外" main "java.lang.ArrayIndexOutOfBoundsException:3 at Matrix.main(Matrix.java:15)"を返します。 – Julian

+0

ああ、私は問題を見る。私は9つの数字を直接入力する必要があります。しかし、実際には、ユーザーは行の行に入力することになっているので、3つの数字を入力してからEnterを押し、次に3つの数字を入力することになっています。 – Julian

+0

その入力はmにのみ格納する必要がありますか?または要素の中に? – XtremeBaumer