ArrayList.indexOf убивает код, но не вызывает сбой программы и не перехватывается - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть этот код

public String[][] checkBoxes(String[][] varden){

    ArrayList[][] tillatnaSiffror = new ArrayList[9][9];

    for(int i=0;i<9;i++){
        for(int ruta=0;ruta<9;ruta++){

            if(tillatnaSiffror[i][ruta] == null){
                tillatnaSiffror[i][ruta] = new ArrayList<Integer>();
                for(int add=1;add<=9;add++){
                    tillatnaSiffror[i][ruta].add(add);
                }
            }
            if(varden[i][ruta].equals("X")){
                for(int a=0;a<9;a++){
                    try {

                        System.out.println(tillatnaSiffror[i][ruta].indexOf(Integer.parseInt(varden[i][ruta])));
                        System.out.print("Testing");

                    } catch(Throwable n){
                        System.out.print("Throws exception");
                    }
                }
            }
        }
    }
}

tillatnaSiffror[i][ruta] - это ArrayList, содержащий числа 1-9, а переменные i и ruta представляют собой циклы for, обертывающие мой код,Двумерный массив varden содержит строки с цифрами от 1 до 9. Проблема в том, что вместо печати искомого индекса он ничего не делает.И потом не печатает «Тестирование», и не перехватывается из-за исключения.Я посчитал количество исключений.

Однако, если я укажу ноль, вот так:

System.out.println(tillatnaSiffror[0][0].indexOf(Integer.parseInt(varden[0][0])));

Затем будет напечатан индекс, а также текст "Тестирование".Есть идеи, почему он не работает с переменными?Это не проблема ArrayIndexOutOfBounds;переменные верны.

Ответы [ 3 ]

3 голосов
/ 05 сентября 2011

Без всего кода и без знания того, какое исключение выдается, мое единственное предложение - разбить эту строку на несколько операторов и посмотреть, где она появляется. Тогда вы, вероятно, сможете найти ответ сами.

String s = varden[i][ruta];
int i = Integer.parseInt(s);
List<Integer> l = tillatnaSiffror[i][ruta];
int idx = l.indexOf(i);
System.out.println(idx);

Edit:

if(varden[i][ruta].equals("X")){

и затем внутри этого if:

Integer.parseInt(varden[i][ruta]))

Вы видите проблему? Кстати, вы, кажется, нигде не используете a третьего for, верно?

1 голос
/ 05 сентября 2011

Почти наверняка вы получаете исключение времени выполнения, которое не проверяется - это означает, что компилятор не предупреждает о необходимости перехвата.Наиболее вероятные исключения времени выполнения, которые вы получаете: ArrayIndexOutOfBoundsException или NumberFormatExcpetion.

Чтобы «исправить» это, попробуйте вместо этого catch (Throwable e) - это определенно поймает все, что брошено в try.Я подозреваю, что вы не на самом деле ловите исключение, а какой-то его подкласс.

0 голосов
/ 05 сентября 2011

Код будет либо:

  • печать «Тестирование»
  • бросить Exception, который пойман блоком 'catch'
  • или бросьте Throwable, который не является подклассом Exception и который пойман в другом месте.

Не все Throwable s являются подклассами Exception: Error s являются подклассами Throwable, но не Exception.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...