【问题标题】:I am getting an ArrayOutOfBounds Exception我收到 ArrayOutOfBounds 异常
【发布时间】:2014-02-13 00:22:35
【问题描述】:

我相信标题说明了一切。这是我的代码:

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]);

考虑到它会产生输出,这很奇怪。

Alpha 列表:

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(); 干杯:)

【问题讨论】:

  • 找出正在发生的事情的最简单方法是使用 IDE 中的调试器。
  • 您发布的代码甚至无法编译。 “r”在哪里定义?了解如何使用调试器。我们不是人类调试器。干杯:)
  • ans 只有一个元素,而您一直在向anspointer 添加一个元素。那肯定是越界了。
  • 问题是我尝试使用调试器但结果不合适,因为一切似乎都是正确的,这很奇怪。这就是我决定在这里问的原因。
  • 顺便感谢大家- -_-

标签: java arrays exception


【解决方案1】:

你有一个大小为 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++;
    ...
}

【讨论】:

    【解决方案2】:

    您的数组ans 的大小仅适用于一个字符。第二个字符导致您的异常。您应该使用动态大小的集合,例如 ArrayList - 就像这样,

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

    【讨论】:

      【解决方案3】:

      ans 的大小为 1。所以ans[anspointer] = alpha[b]; 是你的异常的来源,一旦 anspointer 增长到大于 0(这是很早的)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 2018-10-18
        相关资源
        最近更新 更多