• ベストアンサー

行列の表示

任意の数nを入力してn×nの正方行列を表示させるプログラムを二次元配列を使って作りたいのですが出来ません。配列の初期化は int matrix[][] = new int[n][n] のように行えばよいと思うのですが、最終的にどう表示させればよいのでしょうか? System.out.println(matrix[][]) を使うと改行されてしまいますし... アドバイスよろしくお願いします。

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

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

配列の中身を自動的に一つずつ表示する機能はないので、自分でループを書いて表示させることになります。 System.out.print と System.out.println をうまく使い分けてみてください。 print では文字列を出力するだけで改行はされません。また、文字列を指定せずに単に System.out.println() を実行すると改行だけが出力されます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

以下のように行のループと列のループをネストして書くことで キレイに表示できると思います。 for( int i=0; i<n; i++ ) { for( int j=0; j<n; j++ ) { System.outprint( matrix[ i ][ j ] ); } System.out.println( "" ); }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 部分行列の抜き出し(C言語)

    部分行列の抜き出し(C言語) ある行列から、任意の部分行列を抜き出すような関数を作りたいのですが、わからないので手助けをお願いしたいです。 たとえば4行4列の行列Aがあった場合、その2行2列、2行3列、3行2列、3行3列目の 4つの(2行2列の)要素を抜き出すような関数です。 枠組みは出来ているので載せておきます。 #include <stdio.h> #include <stdlib.h> #include <math.h> typedef struct matrix{ double *data; int size[2]; }MATRIX; MATRIX create_matrix(int m,int l,int a); //行列の作成 void print_matrix(MATRIX A); //行列の表示 MATRIX submatrix(MATRIX matrix_A,int m,int n,int l,int k); //任意の部分行列の抜き出し int main(int argc,char **argv) { //構造体の初期化 MATRIX matrix_A={NULL,NULL,NULL}; MATRIX matrix_B={NULL,NULL,NULL}; MATRIX matrix_C={NULL,NULL,NULL}; int m=0; //行列の行 int l=0; //行列の列 int a=1; //要素 double det=0; //行列計算 //行列Aの作成 m=4;//行 l=4;//列 matrix_A = create_matrix( m, l, a); //関数 matrix_C = submatrix(matrix_A,2,2,3,3); //行列結果出力 printf("\n\tmatrix input"); print_matrix(matrix_A); printf("\n\tmatrix output"); print_matrix(matrix_C); //行列の開放 free(matrix_A.data); matrix_A.data=NULL; free(matrix_C.data); matrix_C.data=NULL; printf("終了!\n\n"); return 0; } MATRIX create_matrix(int m,int l,int a) { MATRIX matrix_A={NULL,NULL,NULL}; int i=0; //サイズの確保 行;size[0] 列;size[1] matrix_A.size[0]=m; matrix_A.size[1]=l; //メモリの確保 matrix_A.data=(double *)malloc(sizeof(double)*matrix_A.size[0]*matrix_A.size[1]); if(matrix_A.data == NULL){ printf("メモリ確保失敗!![matrix_A]\n"); exit(1); } //行列Aの作成 for(i=0; i<((matrix_A.size[0])*(matrix_A.size[1])) ;i++){ *(matrix_A.data+i)=a+i; } return(matrix_A); } /*行列の表示*/ void print_matrix(MATRIX matrix_A) { int i=0; int j; //行 int k; //列 printf("\n行列の表示\n"); //行列Aのプリント for(j=0;j<matrix_A.size[0];j++){ for(k=0;k<matrix_A.size[1];k++){ printf("%f\t",*(matrix_A.data+k*matrix_A.size[0]+j)); } printf("\n"); } return; } MATRIX submatrix(MATRIX matrix_A,int m,int n,int l,int k) { MATRIX matrix_C = {NULL,NULL,NULL}; int i,j; //サイズの確保 行;size[0] 列;size[1] matrix_C.size[0]=l-m+1; matrix_C.size[1]=k-n+1; //メモリの確保 matrix_C.data=(double *)malloc(sizeof(double)*matrix_C.size[0]*matrix_C.size[1]); if(matrix_C.data == NULL){ printf("メモリ確保失敗!![matrix_C]\n"); exit(1); } //任意の部分行列の抜き出し (ここがわかりません。) } よろしくお願いします。

  • 行列の証明問題です。

    n次正方行列Aが任意の正則行列Pに対して P^-1APとすると、 (1 1)成分が1 (n 1)成分が0(n≧1) であるn次正方行列になるならば A=Eである。 証明の方針を教えてくれませんか?

  • 引数になっている二次元配列の大きさを知る

    行列の掛け算をする関数で Matrix(int a[2][2], int b[2][2], int result[2][2]) のようにすると[3][3]用、[4][4]用、・・・と似たようなプログラムをいっぱい作る羽目になる。 Matrix(int *a, int *b, int *result) のようにすると*aから配列の大きさがわかれば その大きさ/4の平方根をとってnとでればn×n行列とわかって解決と考えましたが、*aから配列の大きさをわかるにはどうしたらいいですか?

  • 行列をベクトルに

    m行n列の行列Aがあったとき、それをm×n行1列の行列(ベクトル)Bに するというプログラムを作りたいです。 つまり MATRIX B; B.m=A.m*A.n; B.n=1; return B; ということだと思うのですが、なかなかうまいくいきません。 また、構造体も使いたいので、 typedef struct { int m; int n; double *mat; } MATRIX; と宣言しました。 みなさんよろしくお願いします。

  • 行列の二項定理を使った問題です。

    数Cの問題です。 わからなかったので、誰か教えてください。 二項定理の応用です。 (1)二次の正方行列Aが実数αに対し(A-αE)の二乗=0(零行列)を満たすとき、 任意の自然数nに対して Aのn+1乗=(n+1)αのn乗A-nαのn+1乗E が成り立つことを示せ。 ただし、Eは単位行列、0は零行列である。 (2)A=( 3 2 -2 -1)←二次の正方行列 のとき自然数nに対してAのn乗を求めよ。 ( 3 2 ) ↑ (-2 -1 ) 協力よろしくお願いします。

  • JAVAのfor文で困っています。

    JAVAの勉強をしていますが、本の練習問題でわからなくて困っています。for文で以下の処理を行いたいです(do,whileはなしです)が、 *を5個ごとに改行したいのですが、改行してくれません。 問題の部分↓ if (n % 5 == 0) System.out.println(); 何か良い方法はありませんか?お願いします。 ------------------------------------------------- //(数を読み込んで)だ個数だけ * を5個ごと改行しながら表示 int n = 0; for (int i = n; n <= 0;){ System.out.print("何個*を表示しますか : "); n = stdIn.nextInt(); } for (int i = 1; i <= n; i++){ System.out.print("*"); if (n % 5 == 0) System.out.println(); } ------------------------------------------------

    • ベストアンサー
    • Java
  • n次元の正方行列Aの行列式と、Aの転置行列A’の行列式が同じであること

    n次元の正方行列Aの行列式と、Aの転置行列A’の行列式が同じであることを、 簡単に証明することはできるのでしょうか?

  • 行列の固有値問題

    以下の証明はどのように行えばいいのでしょうか。 n次多項式f(s)=a(n)s^n + a(n-1)s^(n-1) + ・・・・ +a(1)s + a(0)とする。 行列A(n×nの正方行列)の固有値がλ1、λ2、・・・、λnであるとき、行列多項式f(A)の固有値はf(λ1)、f(λ2)、・・・、f(λn)であることを、任意のn次正方行列は適当な正則行列QによってQ^(-1)AQが下三角行列になるようにできることと、下三角行列の固有値は対角成分になることを用いて示せ。 という問題です。分かりにくくてすいません。 行列多項式というものが初めて目にする言葉ですし、方針が立ちません。 よろしくお願いします。

  • 行列

    0<=a<=1に対して 行列(三次の正方行列) 行列A = (3/4a 1 -1) ( 0 9a   3 ) とする。ここで,det(M)は正方行列Mの行列式を表す。 (3/4a 1 -a) (1)det(A)を求めよ。 (2)nを自然数とする。lim(n→∞)det(A^n)を求めよ。 (1)については,-27/4*a^3+27/4a^2と分かるのですが (2)についてのやり方がわかりません。お願いします。

  • 処理の途中で不正な文字が表示される

    学校でjavaを勉強しています。 「指定した配列と、その配列中の最大値を表示させる」という プログラムを作りたいのですが、コンパイルし実行すると ↓のように表示されてしまいます。どこに問題があるのでしょうか?教えてください。 配列a[] = { 3 最大1 1 最大5 5 4 0 5 -1 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept ion: 7 at kadai5.main(kadai5.java:13) 元のプログラムは↓です。 class kadai5{ public static void main(String[] arg) { int i=0; int max=0; int[] score={3,1,5,4,0,5,-1}; int n=score.length; System.out.print("配列a[] = { "); while(i<n){ System.out.print(score[i]+" "); i=i+1; if(max<score[i]){ max=score[i]; System.out.println("最大"+max); } } System.out.println("}"+"\n\n"); System.out.println("最大値は"+max+"です。"); } }

    • ベストアンサー
    • Java