【问题标题】:Java, Bubble Sort, Arrays, Exception in thread "main" ErrorJava,冒泡排序,数组,线程“主”错误中的异常
【发布时间】:2013-02-19 15:12:18
【问题描述】:

我今天在课堂上有一个关于冒泡排序的教程,但我遇到了一个不知道如何解决的错误。

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 8 在 BubbleSorter.main(BubbleSorter.java:24)

它没有被评估,但我想通过它继续。 谢谢你。下面是我的全部代码。

public class BubbleSorter {
    public static void main(String[] args)
    {
        int i;
        int array[] = { 12, 9, 4, 99, 120, 1, 3, 10 };
        System.out.println("Array Values before the sort:\n");
        for (i = 0; i < array.length; i++)
            System.out.print(array[i] + " ");
        System.out.println();
        System.out.println();

        bubble_srt(array, array.length);

        System.out.print("Array Values after the sort:\n");
        for (i = 0; i < array.length; i++)
            ;
        System.out.print(array[i] + " ");
        System.out.println();
        System.out.println("PAUSE");
    }

    private static void bubble_srt(int[] array, int length) {
        int i, j, t = 0;
        for (i = 0; i < length; i++) {
            for (j = 1; j < (length - 1); j++) {
                if (array[j - 1] > array[j]) {
                    t = array[j - 1];
                    array[j - 1] = array[j];
                    array[j] = t;
                }
            }
        }
    }
}

【问题讨论】:

  • 请格式化您的代码。

标签: java arrays exception bubble-sort


【解决方案1】:

你有一个小错误:

这个:

for (i = 0; i<array.length; i++);
System.out.print(array[i] + " ");

应该是:

//                              v - Semicolon removed
for (i = 0; i<array.length; i++)
    System.out.print(array[i] + " ");

【讨论】:

  • 我想这是一个格式问题,否则我会期待一个不同的错误消息。即symbol i does not exist in Class X
  • 好吧,i 确实存在,它没有在 for 循环中声明。我认为这是一个陷阱。
  • 在任何一种情况下,超出范围的数组都来自排序本身,而不是之后打印数组。
  • 我不这么认为,看异常发生在的方法:BubbleSorter.main(BubbleSorter.java:24)
  • i 实际上是在方法的最顶部定义的 - @Binyamin 是正确的,这就是问题的原因
【解决方案2】:

也要改

for (j = 1; j < (length - 1); j++) {

for (j = 1; j < length; j++) {

你遗漏了数组的最后一个元素!

输出

Array Values before the sort:

12 9 4 99 120 1 3 10 

Array Values after the sort:
1 3 4 9 10 12 99 120 
PAUSE

【讨论】:

  • 谢谢,我会改的
【解决方案3】:

你需要改两行

for (i = 0; i < array.length; i++)
        ;
System.out.print(array[i] + " ");

for (i = 0; i < array.length; i++)
    System.out.print(array[i] + " ");

for (j = 1; j < (length - 1); j++) {

for (j = 1; j < (length); j++) {

【讨论】:

    【解决方案4】:

    在第 18 行,你需要去掉 ;或放在括号中 {

    【讨论】:

      猜你喜欢
      • 2023-01-14
      • 2012-01-17
      • 2016-10-25
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2023-04-07
      • 2014-06-03
      • 2014-06-17
      相关资源
      最近更新 更多