ArrayIndexOutofBound错误,我只想将元素输入到2d String数组中

时间:2015-03-29 07:19:24

标签: java

import java.util.Scanner;
import java.io.*;

public class Cakeminator{
    public static void main(String[] args)throws IOException,ArrayIndexOutOfBoundsException{
        int i,j,r=0,c=0;
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader br=new BufferedReader(isr);
    Scanner stdin=new Scanner(System.in);   



    // String[][] a=new String[r][c];
    // entering rows length
    r=stdin.nextInt();
    System.out.println("rows . "+r);

    //entering columns length
    c=stdin.nextInt();
    System.out.println("cols . "+c);

    String[][] a=new String[r][c];

    //entering elements into matrix 
    for(i=0;i<=r-1;i++){
        for(j=0;j<=c-1;j++){
           a[i][j]=br.readLine();   
        }
    }
    // printing matrix
    for(i=0;i<r;i++){
        for(j=0;j<c;j++){
            System.out.println("\t");   
            System.out.println(a[i][j]);    
        }
    }
    }

}

//在我的代码中更改数组声明位置之后。

4 个答案:

答案 0 :(得分:0)

数组索引从0开始,直到n-1。所以改变你的循环:

for(i=0;i<=r;i++){

for(i=0;i<r;i++) {//go till r-1.

同时定义

String[][] a=new String[r][c];

从用户获得rc之后,即在System.out.println("cols . "+c);之后,当初始化r和c为0时,它将初始化为0行和0列。

答案 1 :(得分:0)

你的代码有两个缺陷,一个是你对二维数组的定义,第二个是循环条件。

在获取输入维度后定义数组。并将条件放入退出索引。

如果数组长度为n,则最大索引值为n-1。更改您的代码如下。

import java.util.Scanner;
import java.io.*;

public class Cakeminator{
    public static void main(String[] args)throws IOException,ArrayIndexOutOfBoundsException{
        int i,j,r=0,c=0;
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader br=new BufferedReader(isr);
    Scanner stdin=new Scanner(System.in);   




    // entering rows length
    r=stdin.nextInt();
    System.out.println("rows . "+r);

    //entering columns length
    c=stdin.nextInt();
    System.out.println("cols . "+c);

    String[][] a=new String[r][c];
    //entering elements into matrix 
    for(i=0;i<=r-1;i++){
        for(j=0;j<c;j++){
           a[i][j]=br.readLine();   
        }
    }
    }

}

答案 2 :(得分:0)

实际上在您的代码中,您首先声明String数组,然后从运行时添加行和列。 因此,首先解析此接收行和列,然后声明String数组

    import java.util.Scanner;
   import java.io.*;

public class Cakeminator{
    public static void main(String[] args)throws IOException,ArrayIndexOutOfBoundsException{
        int i,j,r=0,c=0;
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader br=new BufferedReader(isr);
    Scanner stdin=new Scanner(System.in);   

    // entering rows length
    r=stdin.nextInt();
    System.out.println("rows . "+r);

    //entering columns length
    c=stdin.nextInt();
    System.out.println("cols . "+c);

    String[][] a=new String[r][c];
    //entering elements into matrix 
    for(i=0;i<=r;i++){
        for(j=0;j<c;j++){
           a[i][j]=br.readLine();   
        }
    }
    }

}

答案 3 :(得分:0)

在我看来,你应该改变一个地方。首先你应该把String[][] a = new String[r][c]放在第System.out.println("cols . "+c)行之后。