• ベストアンサー

コンパイル後のエラー。

こんにちは、質問があります。 下のプログラムを組みました。 コンパイルには成功しましたが、実行することができません。 import java.io.*; public class Gyouretu { public static void main(String[] args) { BufferedReader reader = new BufferedReader( new InputStreamReader(System.in), 1); try{ System.out.println("行列数を入力"); String line = reader.readLine(); int n = Integer.parseInt(line); int a[][] = new int[n][n]; int b[][] = new int[n][n]; int c[][] = new int[n][n]; int i,j,k; for ( i = 0; i < n; i++){ for ( j = 0; j < n; j++){ c[i][j]=0; for ( k = 0; k < n; k++){ c[i][j] += a[i][k] * b[k][j]; System.out.print(c); System.out.print(i); System.out.print(j); } } } }catch (IOException e){ System.out.println("end"); } } } 行列の計算をするプログラムなのですが、コンパイル後に行列数(何行何列か?)を入力するとこんなエラーが出ます。 「'2' は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 なぜなのか、どうしてもわかりません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rancer
  • ベストアンサー率66% (6/9)
回答No.3

C言語とか、やったことありますか? Javaの配列は、ポインタ配列なんで、配列の中身を見るためには、各要素を指定しないと、ただのポインタが表示されるだけになります。 2次元配列だったら、こんな感じにしないと、要素の値を全部、表示できません。 int[][] hairetu = new int[10][10]; for(int i=0; i<hairetu.length; i++) {  for(int j=0; j<hairetu[0].length; j++) {   System.println("(" + i + "," + j + ")=" + hairetu[i][j]);  } } 1次元配列だったら、java.util.ArraysのasListメソッドを使って、 配列をListオブジェクトに変換して、それをtoStringメソッドを使って、 文字列表現にする方法もあります。 まぁ、色々工夫して、頑張って下さい。

jin_09
質問者

お礼

ありがとうございます。いろいろなアドバイスや書籍を読んでみたところ、配列の仕組みがわかってきました。これからもがんばってみます!

その他の回答 (2)

回答No.2

System.out.print(c); となっていますが、cは二次元配列の変数名ですよね? って言うことは、配列の要素を指定しなければいけないんじゃないでしょうか? //を使ってコメントアウトすることによって、どんな値が出力されるか見比べてみると良いかもしれませんよ。

jin_09
質問者

補足

配列の要素を指定する、ということはどういうことなのでしょうか?おっしゃる通りcは配列の変数名です。 このプログラムを実行すると、こんな出力がされてしまいます。 行列数を入力 2 [[I@1f3367500[[I@1f3367500[[I@1f3367501[[I@1f3367501[[I@1f3367510[[I@1f3367510[[I@1f3367511[[I@1f3367511 なぜこんな出力になるのか、どうもわかりません。 何かありましたらご指摘ください。

  • tediwec
  • ベストアンサー率70% (21/30)
回答No.1

こんにちは。 コンパイルした後に実行していますか? javac Gryouretu.java でコンパイルした後、 java Gryouretu で実行してみてください。

jin_09
質問者

お礼

ありがとうございます。解決しました。非常に初歩的なミスをしていたんですね。もっと練習が必要なようです。

関連するQ&A