2015-04-11 2 views
-1

Это тренировка для университета. Программа состоит в подсчете/чтении числа квадратов на листе (где размер задан пользователем), квадраты представлены «#», а пустое пространство - «.».Чтение символов с ввода

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); 
     } 
} 

Так затмение дает мне ошибки на folha[i][x] = bla.charAt(x), сначала я должен был это следующим образом: folha[i][x] = in.next().charAt(x), но он дает ошибку, что я не помню, так что мой друг сказал, что использовать объект подобного теперь, но все равно идет не так. При выполнении этого, она позволяет вставлять флаг и размер листа, но как только вы закончите вставки первой экс линии: ### это дает мне:

 
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 создавали тот же метод.

Надеюсь, вы, ребята, можете вести меня здесь.

+0

Пожалуйста, добавьте информацию о * полном вводе *, который вы используете (включая 'флаг',' l' и 'c'). Что такое 'флаг'? – RealSkeptic

+1

Я бы начал с наименования моих переменных более описательно, чем 'bla'. – JonasCz

+0

Вы должны переместить свой 'bla = in.nextLine();'. К внешнему циклу. Вы потеряете данные ввода, если сохраните его во внутреннем цикле. – Tom

ответ

0

Вы получите StringIndexOutOfBoundsException, если bla.length() будет меньше, чем значение c.

, потому что ваша эта линия не так

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

вы должны проверить x< bla.length() до этой линии.

Смежные вопросы