2015-08-06 3 views
-1

Это мой код. Это генератор случайных строк. Когда я запускаю его, если количество букв и символов, добавленных вместе, меньше желаемого количества цифр, я получаю код ошибки, как показано ниже. Может кто-нибудь помочь мне в исправлении этого?Как устранить ошибку "java.lang.IndexOutOfBoundsException"?

import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 
import java.util.Scanner; 

public class list { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Random num = new Random(); 
     System.out.println("How many characters do you want?"); 
     Scanner Digits = new Scanner(System.in); 
     int digits = Integer.parseInt(Digits.nextLine()); 
     System.out.println("How many different numbers do you want? 1-10 please"); 
     int number = Integer.parseInt(Digits.nextLine()); 
     System.out.println("Which letters do you want? One at a time, press enter after each letter. If done, just press enter."); 
     List<String> characters = new ArrayList<String>(); 
     while (true) { 
      System.out.println("Add your characters."); 
      String character = Digits.nextLine(); 
      if (character.equals("")) { 
       break; 
      } else { 
       characters.add(character); 
      } 
     } 

     List<Object> andrew = new ArrayList<Object>(); 
     for (int x = 0; x < digits; x++) { 
      andrew.add(num.nextInt(number)); 
      andrew.add(characters.get(x)); 
     } 

     for (int x = 0; x < andrew.size(); x += 2) { 
      System.out.print(andrew.get(x)); 
     } 
    } 
} 

Исключение:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 
at java.util.ArrayList.rangeCheck(Unknown Source) 
at java.util.ArrayList.get(Unknown Source) 
at list.main(list.java:33) 

ответ

0

IndexOutOfBoundsException происходит при попытке выбрать значение из массива, который выходит за пределы его размера. В этом примере вы пытаетесь получить значение в [3]. Вы можете прочитать много от трассировки стека:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 

Массивы в Java начинаются с индекса [0], а не индекс [1], и поэтому массив длиной 3 будет иметь только индексы [0], [1] и [2].

Попытка получить значение на уровне [3], когда массив распространяется только на [2], это приведет к ошибке.

ОДНАКО, другой ответ на самом деле неверен о том, где проблема. Трассировка стека говорит, что она находится по строке 33, которая заключается в следующем:

andrew.add(characters.get(x)); 
Смежные вопросы