2014-02-13 66 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在加密的方法是:

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

r值Random r = new Random(); 乾杯:)

+1

要找出發生了什麼的最簡單方法是在IDE中使用調試器。 –

+2

你發佈的代碼甚至不會編譯。 「r」在哪裏定義?瞭解如何使用調試器。我們不是人類調試者。乾杯:) – 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(這很早),你的異常的來源。

相關問題