0

このエラーを修正するにはどうすればよいですか? また、それはどういう意味ですか?

java.lang.ArrayIndexOutOfBoundsException: 5
    at Sort.sort(Sort.java:29)
    at Sort.<init>(Sort.java:13)
    at SortedArray.<init>(SortedArray.java:23)

コードは次のとおりです。

import java.util.Scanner;
import java.util.Random;

public class SortedArray
{
    Scanner input = new Scanner(System.in);
    int [] Array;
    Sort sortedArray;
    int sizeOfArray;

    public SortedArray()
    {
        System.out.print("Enter the number of values to put in the array: ");
        sizeOfArray = input.nextInt();
        Array = new int [sizeOfArray];
        System.out.println("");
        for(int i = 0; i < sizeOfArray; i++)
        {
            Random r = new Random();
            Array[i] = r.nextInt(100) + 1;
            System.out.println(Array[i]);
        }
        sortedArray = new Sort(Array, sizeOfArray);
        sortedArray.display();
    } 
}


public class Sort
{
  int[] array;
  int sizeOfArray;
  public Sort(int[] oldArray, int sizeOfOldArray)
  {
    sizeOfArray = sizeOfOldArray;
    array = new int [sizeOfArray];
    for( int i = 0; i < sizeOfArray; i++)
    {
        array[i] = oldArray[i];
    }
    sort();
  }

  public void display()
    { 
       for ( int i = 0; i < sizeOfArray; i++){
           System.out.println(array[i]);
       }
    }

  private void sort()
    {
        for (int i = 0; i < sizeOfArray; i++)
        {
            for (int j = 0; j < sizeOfArray; i++)
            {
                if (array[j] < array[i])
                {
                    swap(i,j);
                }
            }
        }
    }

    private void swap(int x, int y)
    {
        int temp;
        temp = array[x];
        array[x] = array[y];
        array[y] = temp;
  }
}

プログラムを実行して値を入力すると、エラーが発生します。プログラムは、数値を最大から最小にソートすることになっています。何が悪いのかわかりません。

4

3 に答える 3

3

まず、それが何を意味するか: 配列があり、その範囲外 (0 未満または配列の長さ以上) のインデックスにアクセスしようとしています。

考えられる原因は次のとおりです。

for (int j = 0; j < sizeOfArray; i++)

jが大きくなりすぎていないことを確認しましたが、増加していることに注意してくださいi

于 2013-06-14T13:06:02.780 に答える
1

i問題は、この状況では正しくない内側のループもインクリメントすることです!

private void sort()
{
    for (int i = 0; i < sizeOfArray; i++)
    {
        for (int j = 0; j < sizeOfArray; j++)
        {
            if (array[j] < array[i])
            {
                swap(i,j);
            }
        }
    }
}
于 2013-06-14T13:07:48.567 に答える
1

あなたの問題はこの行にあります

for (int j = 0; j < sizeOfArray; i++)

そのはず

for (int j = 0; j < sizeOfArray; j++)
于 2013-06-14T13:07:48.750 に答える