从输入中读取字符

时间:2015-04-11 11:35:09

标签: java arrays char

这是大学的运动训练。该程序是关于计算/读取纸张上的方格数(其大小由用户给出),方块由'#'表示。而且空的空间是'。'。

public class Quadrado {

    public static void main(String[] args){
        int flag=0, l=0, c=0;
        String bla;
        Scanner in = new Scanner(System.in);
        flag = in.nextInt();
        l = in.nextInt();
        c = in.nextInt();
        char [][] folha = new char[l][c];
        while(in.hasNext()==true){
        for (int i=0; i<l; i++){
            for (int x=0; x<c; x++){
                bla = in.nextLine();
                folha[i][x] = bla.charAt(x);
            }
        }
        }

        if(flag==1){
            contador(folha,in);
        }

    }


    public static void contador(char[][] folha, Scanner in){
        int conta=0, l=0, c=0;
        for (int i=0; i<l; i++){
            for (int x=0; x<c; x++){
                if (folha[i][x]=='#'){
                    conta++;
                }
            }
        }
        System.out.print(conta);
        }
}

所以eclipse在folha[i][x] = bla.charAt(x)给了我错误,起初我有这样的错误:folha[i][x] = in.next().charAt(x),但它给出了一个我不记得的错误,所以我的朋友说像现在这样使用对象,但它仍然出错。当你执行它时,它允许你插入标志和工作表的大小,但是一旦你完成插入第一行ex:###它就会给我:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at Quadrado.main(Quadrado.java:21)

在调用方法时也给了我一个错误,eclipse建议的解决方案是创建相同的方法。

希望你们能在这里指导我。

1 个答案:

答案 0 :(得分:0)

StringIndexOutOfBoundsException小于bla.length()的值时,您将获得c

因为你的这一行错了

folha[i][x] = bla.charAt(x);

您应该在此行前检查x< bla.length()