【问题标题】:Ascending Order Bubble sort java.lang.ArrayIndexOutOfBoundsException: 5 at wst2.calc(wst2.java:18)升序冒泡排序 java.lang.ArrayIndexOutOfBoundsException: 5 at wst2.calc(wst2.java:18)
【发布时间】:2015-11-23 16:17:08
【问题描述】:

这是我制作的程序,我什至做了一个从 0 到 4 的正确 for 循环,因为需要对 5 个数字进行排序,但仍然得到 arrayindexoutofboundsexception。

import java.util.*; class wst2 {
    public static void calc()
    {
        Scanner sc= new Scanner(System.in);
        int i,j , temp;
        int a[]=new int [5];
        for(i=0;i<=4;i++)
        {
            System.out.println("Enter 5 numbers");
            a[i]=sc.nextInt();
        }
        for(i=0;i<=4;i++)
        {
            for(j=i;j<=4-i;j++)
            { 
                if(a[j] > a[j+1])
                {
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        for(i=0;i<=4;i++)
        {
            System.out.println(a[i]);
        }
    } }

【问题讨论】:

  • 您循环到j&lt;=4,但访问元素a[j+1]。现在您在最后一次迭代中访问索引 5 处的元素,这会导致您的错误。
  • 那么应该改哪一行?
  • 不要使用4作为固定循环确定值,您可以循环直到i&lt;a.length-1进行排序。
  • 长度是 5 ,所以 5-1 无论如何都会给出 4 。它有什么帮助?
  • 这是一个示例,基本上是逐字逐句地说明您要执行的操作:crunchify.com/java-bubble-sort-algorithm-ascending-order-sample 在 for 循环中将

标签: java for-loop bubble-sort


【解决方案1】:

这条语句int a[]=new int [5];定义了一个长度为5的数组。 使用长度为 5 的数组,您可以访问索引从 04 ({0, 1, 2, 3, 4}) 的元素。 但是在这一行

a[j]=a[j+1];

在可能的特定情况下(j = 4i = 0),您试图访问不允许的 a[4+1](表示 a[5])。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多