【问题标题】:Java array giving "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6"Java 数组给出“线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:6”
【发布时间】:2014-11-14 16:40:11
【问题描述】:

这里是源代码。我看不出这个冒泡排序代码有任何问题:

int[] numbers = { 5, 8, 14, 1, 5678 };
int tempVar;
for (int i = 0; i < numbers.length; i++)
{
   for(int j = 0; j < numbers.length; j++)
   {
            if(numbers[i] > numbers[j + 1])
            {
                   tempVar = numbers [j + 1];
                   numbers [j + 1]= numbers [i];
                   numbers [i] = tempVar;
            }
   }
}
for (int i = 0; i < numbers.length; i++)
{
     System.out.println(numbers[i].toString());
}

【问题讨论】:

  • numbers[] 是一个原始的 int 数组。如何在其中一个元素上调用 toString()?
  • 这个问题对你现在正在处理的问题非常具体,我怀疑它形成了一个有用的知识库。我的建议:使用你的调试器。遍历直到抛出异常,你就会得到答案
  • 是的,删除 .toString()
  • @Liam - 我想教一个人钓鱼,而不是给他一条鱼。否则,我们只是鼓励人们将他们琐碎的编译器/运行时错误外包给 Stack Overflow...
  • @AndrzejDoyle 好点,我发帖时没有看到你的评论。

标签: java bubble-sort


【解决方案1】:

从原始数组中删除 toString。试试下面的代码。

    int[] numbers = { 5, 8, 14, 1, 5678 };
    int tempVar;
    for (int i = 0; i < numbers.length; i++)
    {
       for(int j = i+1; j < numbers.length; j++)
       {
                if(numbers[i] > numbers[j])
                {
                       tempVar = numbers [j];
                       numbers [j]= numbers [i];
                       numbers [i] = tempVar;
                }
       }
    }
    for (int i = 0; i < numbers.length; i++)
    {
         System.out.println(numbers[i]);
    }

【讨论】:

    【解决方案2】:

    ArrayIndexOutOfBoundsException 当您尝试访问超过其定义长度的数组时抛出。您超出了循环中的数组范围。而且循环中的逻辑似乎有点错误。尝试以下方法:

        int[] numbers = { 5, 8, 14, 1,5678};
        int tempVar;
        for (int i = 0; i < (numbers.length - 1); i++)
        {
           for(int j = 0; j < (numbers.length-1); j++)
           {
                    if(numbers[j] > numbers[j + 1])
                    {
                           tempVar = numbers [j];
                           numbers [j]= numbers [j + 1];
                           numbers [j+1] = tempVar;
                    }
           }
        }
        for (int i = 0; i < numbers.length; i++)
        {
             System.out.println(numbers[i]);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多