2014-02-13 5 views
-3

Я считаю, что название объясняет все это. Вот мой код:Я получаю исключение ArrayOutOfBounds

public String encrypt(String a) { 

    char regex[] = a.toCharArray(); 
    char ans[] = {'E'}; 
    int anspointer = 0; 

    for(int i = 0; i < regex.length; i+=2){ 
     ans[anspointer] = regex[i]; 
     anspointer++; 
     int b = r.nextInt(alpha.length-1); 
     System.out.println("random number b="+b + " Contains:" + alpha[b]); 
     ans[anspointer] = alpha[b]; 
     anspointer++; 
     int c = r.nextInt(alpha.length-1); 
     System.out.println("random number c="+c + " Contains:" + alpha[c]); 
     ans[anspointer] = alpha[c]; 
     anspointer++; 
    } 
    return ans.toString(); 
} 

И программный выход.

alpha size: 58 
Encrypting: ASDF1234 
random number b=16 Contains:Q 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
    at sec.encrypt(sec.java:39) 
    at sec.main(sec.java:56) 

Строка 39 в методе Encrypt является:

System.out.println("random number b="+b + " Contains:" + alpha[b]); 

Что странно, учитывая тот факт, что она производит выход.

Альфа список:

public final char[] alpha = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 
     'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 
     'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 
     'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 
     'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; 

Random r = new Random(); г значение Приветствия :)

+1

Самый простой способ узнать, что происходит, это использовать отладчик в вашей среде IDE. –

+2

Код, который вы отправили, даже не компилируется. Где определяется «r»? Узнайте, как использовать отладчик. Мы не отладчики людей. Cheers :) – OldProgrammer

+0

'ans' имеет только один элемент, пока вы храните его, чтобы добавить его в' anspointer'. Это конечно. – sashkello

ответ

2

У вас есть массив размером 1:

char ans[] = {'E'}; 

Но вы пытаетесь получить доступ места, которые не существуют, используя

ans[anspointer] = regex[i]; 
anspointer++; 

Массивы имеют фиксированные размеры. Укажите размер или используйте какой-либо список, например

char ans[] = new char[regex.length]; 
for(int i = 0; i < regex.length; i++){ 
    ans[anspointer] = regex[i]; 
    anspointer++; 
    ... 
} 
1

Ваш массив ans имеет размер только для одного символа. Второй символ вызывает ваше исключение. Вы должны использовать динамически размера коллекции, как ArrayList - как это так,

List<Character> ans = new ArrayList<Character>(); 
1

ans имеет размер один. Таким образом, ans[anspointer] = alpha[b]; является источником вашего исключения, когда значение anspointer растет больше 0 (что довольно рано).

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