Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

エラー箇所に"ArrayIndexOutOfBoundsException" とエラーが出てしまいます。このエラーについて調べたのですが、どこがおかしいのか分かりません。どなたか何が問題なのか教えてください。

import java.io.*;

class gyouretu{
    public static void main (String args[])throws IOException{
    String s;
    int t,d;
    int a[][]={{0,0,0,0,0,0},{0,0,0,0,0,0}};
    int b[][]={{0,0,0,0},{0,0,0,0}};
    double c[][]={{0,0,0,0},{0,0,0,0}};
    
    BufferedReader k= new BufferedReader(new InputStreamReader(System.in));
    
    System.out.println("これは3× 3か2× 2の行列式とその逆行列を求めるプログラムです");
    
    do{
        System.out.println("どっちですか? (2,3 のどちらかで答えてください)");
        s=k.readLine();
        d=Integer.parseInt(s);
        switch(d){
            case 2:
                System.out.println("2× 2行列だね!!");
                for(int i=0;i<2;i++){
                    for(int j=0;j<2;j++){
                        System.out.println((i+1) + "行" + (j+1) + "列目の値はなんですか?");
                        s=k.readLine();
                        a[(i+1)][(j+1)]= Integer.parseInt(s); %エラー箇所
                    }
                }
            break;
            case 3:
                System.out.println("3×3行列だね");
                for(int i=0;i<3;i++){
                    for(int j=0;j<3;j++){
                        System.out.println((i+1) + "行" + (j+1) + "列目の値はなんですか?");
                        s=k.readLine();
                        a[(i+1)][(j+1)]= Integer.parseInt(s); 
                        a[(i+4)][(j+1)]=a[(i+1)][(j+1)]; %エラー箇所
                        a[(i+1)][(j+4)]=a[(i+1)][(j+1)];
                    }
                }    
            default:
                System.out.println("ちゃんと読みましょう");
                d=0;
        }
    }while(d<1);
    for(int i=0;i<d;i++){
        for(int j=0;j<d;j++){
            System.out.println((i+1) + "行" + (j+1) + "列目の値はなんですか?");
            s=k.readLine();
            a[(i+1)][(j+1)]= Integer.parseInt(s);
        }
    }
    
    Calc obj =new Calc();
    
    do{
        System.out.println("何がしたいですか?1:行列式の計算 2:逆行列を求める");
        s=k.readLine();
        t=Integer.parseInt(s);
        switch(t){
            case 1:
                obj.set(d,a);
            break;
            case 2:
                obj.cal(d,a,b,c);
            break;
            default:
                System.out.println("ちゃんと読もうぜ");
                t=0;
            break;
        }
    }while(t<1);
    }
}
class Calc{
    int D;
    void set(int ix,int[][]A){
        switch(ix){
            case 2:
                System.out.println("行列式の計算をします");
                D=A[1][1]*A[2][2] - A[1][2]*A[2][1];
                System.out.print(D);
            break;
            case 3:
                System.out.println("行列式の計算をします");
                int n=0,m=0;
                for(int i=0;i<3;i++){
                    n=n+A[(1+i)][1]*A[(2+i)][2]*A[(3+i)][(3)];
                    m=m-A[(3+i)][1]*A[(2+i)][2]*A[(1+i)][3];
                }
                D=n+m;
                System.out.print(D);
            break;
        }
    }

    void cal(int ix,int[][]A,int[][]B,double[][]C){        
        System.out.println("逆行列の計算をします");
        System.out.println("逆行列の");
        switch(ix){
            case 2:
                B[1][1]=A[2][2];
                B[1][2]=-A[1][2];
                B[2][1]=-A[2][1];
                B[2][2]=A[1][1];
                for(int i=0;i<2;i++){
                    for(int j=0;j<2;j++){
                        C[(i+1)][(j+1)]=((double)B[(j+1)][(i+1)])/((double)D);
                    System.out.println((i+1) +"行"+ (j+1) +"列目の値は"+ C[(i+1)][(j+1)] +"です");
                    }
                }
            break;
        
            case 3:
                for(int i=0;i<3;i++){
                    for(int j=0;j<3;j++){
                        switch(i){
                            case 0:
                                B[1][(j+1)]=(A[2][(j+2)]*A[3][(j+3)]-A[3][(j+2)]*A[2][(j+3)]);
                            break;
                            case 1:
                                B[2][(j+1)]=-(A[1][(j+2)]*A[3][(j+3)]-A[1][(j+3)]*A[3][(j+2)]);
                            break;
                            case 2:
                                B[3][(j+1)]=(A[1][(j+2)]*A[3][(j+3)]-A[1][(j+3)]*A[3][(j+2)]);
                            break;
                        }
                    }
                }
                for(int i=0;i<3;i++){
                    for(int j=0;j<3;j++){
                        C[(i+1)][(j+1)]=((double)B[(j+1)][(i+1)])/((double)D);
                        System.out.print(i+1 +"行"+ j+1 +"列目の値は"+ C[(i+1)][(j+1)] +"です ");
                    }
                }
            break;
        }
    }
}
            

3

回答

102

閲覧

3件の回答

評価

0

解決しました。

評価

0

今度は計算がうまくいかなくなりました。もんだいてんがあれば指摘をお願いしたいです。。。すいません

評価

0

もんだいてんは、自分で何をしてみたかを書かずに質問していることだな。

System.out.println()は分かってるのかな。
まずは処理1つ1つの間にSystem.out.println()を挟んで、どこまで想定どおりに変数が変わっていて、どこからおかしくなるのか、見つけることだ。
そして、そのおかしくなる直前の処理が妥当かどうかを考えてみよう。
こういうのを、デバッグというのだよ。

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名