有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

气泡排序程序中的java错误

尝试使用气泡排序算法对数组元素进行排序时出错。 该错误发生在从用户接受数组元素之后

参考: http://www.java2novice.com/java-sorting-algorithms/bubble-sort/

代码:

package com.interview.programs;
import java.util.Scanner;
public class BubbleSort
{
    public static void bubble(int array[])
    {
        int n=array.length;
        int k;
        for(int m=n;m>=0;m--)
        {
            for(int i=0;i<n-1;i--)
            {
                k=i+1;
                if(array[i] > array[k])
                {
                    swap(i, k, array);
                }
            }
            print(array);
        }
    }
    private static void swap(int i, int j, int[] array)
    {
        int temp;
        temp=array[i];
        array[i]=array[j];
        array[j]=temp;
    }
    private static void print(int[] array)
    {
        for(int i=0;i<array.length;i++)
        {
            System.out.println(" "+array[i]);
        }
    }
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        BubbleSort b=new BubbleSort();
        Scanner input=new Scanner(System.in);
        int n;
        System.out.println("How many number you want to sort? ");
        n=input.nextInt();
        int[] array = new int[n];
        System.out.println("Enter numbers: ");
        for(int i=0;i<n;i++)
        {
            array[i]=input.nextInt();
        }
        b.bubble(array);
        System.out.println("Your sorted array numbers are: ");
        for(int i=0;i<n;i++)
        {
            System.out.print(+array[i]+" ");
        }
    }
}

输出:

How many number you want to sort? 
3
Enter numbers: 
6
3
9
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at com.interview.programs.BubbleSort.bubble(BubbleSort.java:14)
    at com.interview.programs.BubbleSort.main(BubbleSort.java:50)

共 (4) 个答案

  1. # 1 楼答案

    将for中的i--更改为i++(int i=0;i<;n-1;i--)

  2. # 2 楼答案

    数组索引越界异常是指当您试图访问数组中不存在的项时发生的情况。在你的例子中,这是元素-1。数组只能包含索引大于0的元素

    当你遇到这样的错误时,如果你读到错误,它会给你信息和行号。此外,搜索特定错误(例如:what is java.lang.arrayindexoutofboundsexception)可能比使用堆栈溢出更好

  3. # 3 楼答案

    方法中的气泡
    for(int i=0;i<n-1;i--)

    将i--更改为i++

  4. # 4 楼答案

    当您试图从数组或大于其长度的索引中访问负索引时,会引发Exception java.lang.ArrayIndexOutOfBoundsException

    在本例中,您尝试在冒泡方法内的第二个中访问索引-1-for(int i=0;i<n-1;i--)。将i--更改为i++将在i0开始时修复它,并希望它一直递增到n-1