【问题标题】:Character ArrayList outOfBounds exceptionCharacter ArrayList outOfBounds 异常
【发布时间】:2016-02-15 11:05:57
【问题描述】:

错误:java.lang.IndexOutOfBoundsException:索引 70 无效,大小为 10;

我创建了一个函数来创建随机 Integer ArrayList,并对其进行一些操作,现在我正在尝试将其调整为 Chars,但出现了奇怪的错误,在我看来,默认的 chars 数组大小更大然后是整数,但我不确定。我能用这段代码做什么? 函数在这里失败:numbers.set(rightNumbers.get(k),answer.charAt(k));

 @Override
    public void charactersRandomise(String answer) {
        final String alphabet = "ABSDEFGHMN";
        final int N = alphabet.length();
        ArrayList<Character> numbers = new ArrayList<Character>();
        ArrayList<Character> rightNumbers = new ArrayList<Character>();
        Random randomGenerator = new Random();
        int i=0;
        Log.d("size",String.valueOf(N));
        while (numbers.size() < 10) {

            char random = alphabet.charAt(randomGenerator.nextInt(N));
            if (!numbers.contains(random)) {
                numbers.add(random);
                Log.d("numbers", numbers.get(i).toString());
                i++;
            }
        }
        int j=0;
        while (rightNumbers.size() < answer.length()) {
            char random = alphabet.charAt(randomGenerator.nextInt(N));
            if (!rightNumbers.contains(random)) {
                rightNumbers.add(random);
                Log.d("RightNumbers",rightNumbers.get(j).toString());
                j++;
            }
        }
        for(int k =0;k<rightNumbers.size();k++){
            numbers.set(rightNumbers.get(k),answer.charAt(k));
            Log.d(rightNumbers.get(k)+"", numbers.get(rightNumbers.get(k)).toString());
        }
        for (int h=0;h<numbers.size()-1;h++) {
            Log.d("newNumber", String.valueOf(numbers.get(h)));
        }
        for(int m=0;m<buttons.length;m++){
            buttons[m].setText(numbers.get(m) + "");
        }
    }

【问题讨论】:

  • 索引 70 无效,大小为 10;这实际上说明了一切。您正在尝试访问第 71 个字符,而只有 10 个字符。哪一行会引发异常?
  • 当我设置新值时,显示的是问题。这个函数对整数很有效,我所做的只是 char random = alphabet.charAt(randomGenerator.nextInt(N));而不是 int random = randomGenerator.nextInt(10);

标签: java arrays arraylist char


【解决方案1】:

numbers.set(rightNumbers.get(k),answer.charAt(k)); - 这个表达式rightNumbers.get(k) 检索一个字符。在 ASCII 中,这个字符(我可以看到它是 F)被转换为 int 中的数字 70,这就是发生异常的原因。

用这个替换它:

numbers.set(k ,answer.charAt(k));

【讨论】:

  • 谢谢!效果很好!出于某种原因,我已将 rightNumbers 数组类型更改为 Character =)。
猜你喜欢
  • 2017-07-24
  • 2014-05-20
  • 1970-01-01
  • 2018-05-16
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多