Java,矩阵溢出

时间:2014-11-24 21:38:11

标签: java arrays matrix int overflow

由于某种原因,它没有编译。我是java的新手,我正在努力学习这个。我不知道这个程序有什么问题。任何人都可以至少指出我正确的方向吗?

  

沟通错误:

     

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:3

     

在Matrix.main(Matrix.java:17)

import java.util.Scanner;

public class Matrix {
    public static void main(String[] args) {

        Scanner data = new Scanner(System.in);
        final int w=3,k=2;
        int[][] x = {                           //Tworzy tablice 4x3 (3x2, bo a1=[0,0])
                {1,12,3},                       //x[0,0]=1  x[0,1]=12 x[0,2]= 3
                {45,4,1,0},                     //x[1,0]=45 x[1,1]=4  x[1,2]= 1  x[1,3]=0
                {2,3}                           //x[2,0]=2  x[2,1]=3
        };
        int[][] matX = new int[w][k];           //tab[w,k]

        for(int i=0 ; i<matX.length ; i++) {
            for(int j=0 ; j<matX[w].length ; j++) {
                matX[i][j] = data.nextInt();
            }
        }

        for(int i=0 ; i<matX.length ; i++) {
            for(int j=0 ; j<matX[w].length ; j++) {
                System.out.println(matX[i][j]);
                if(j==matX[w].length-1) {
                    System.out.println(System.lineSeparator());
                }
            }
        }
        data.close();
    }
}

2 个答案:

答案 0 :(得分:2)

您使用长度w作为matX的索引,j<matX[w].length 本身就是无效索引。变化

j<matX[i].length

为:

i

使用外部循环变量{{1}}。

答案 1 :(得分:0)

尝试在循环中使用matX[i]而不是matX[w],这里有一些代码开头:

import java.util.Scanner;

public class Matrix { public static void main(String[] args) {

    Scanner data = new Scanner(System.in);
    final int w=3,k=2;
    int[][] x = {                           //Tworzy tablice 4x3 (3x2, bo a1=[0,0])
            {1,12,3},                       //x[0,0]=1  x[0,1]=12 x[0,2]= 3
            {45,4,1,0},                     //x[1,0]=45 x[1,1]=4  x[1,2]= 1  x[1,3]=0
            {2,3}                           //x[2,0]=2  x[2,1]=3
    };
    int[][] matX = new int[w][k];           //tab[w,k]

    for(int i=0 ; i<matX.length ; i++) {
        for(int j=0 ; j<matX[i].length ; j++) {
            matX[i][j] = data.nextInt();
        }
    }

    for(int i=0 ; i<matX.length ; i++) {
        for(int j=0 ; j<matX[i].length ; j++) {
            System.out.println(matX[i][j]);
            if(j==matX[i].length-1) {
                System.out.println(System.lineSeparator());
            }
        }
    }
    data.close();
}