2014-02-13 63 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(这很早),你的异常的来源。

相关问题