簡體   English   中英

對負數組排序

[英]Sorting a negative Arrays

所以我想對包含負數的數組進行排序。 我的方法有這個。 當我用負輸入運行它時,java.lang.negativeArray異常消失了。 這是代碼:

protected int size;
protected int offset;

public CountSort2(int nilaiMax,int nilaiMin)
{
   this.size = nilaiMax-nilaiMin+1;
   this.offset=nilaiMin;
}

public void sort(int[] arrInput)
{
    int[] arrFrek = new int[size];
    for(int i=0;i<arrFrek.length;i++)
    {
        arrFrek[i]=0;
    }

    for(int i=0;i<arrInput.length;i++)
    {
        arrFrek[arrInput[i]-offset]+=1;
    }

    for(int i =1; i<arrFrek.length;i++)
    {
        arrFrek[i] = arrFrek[i]+arrFrek[i-1];
    }
    int[] newArrInput = new int[arrInput.length];
    for(int i=0;i<arrInput.length;i++)
    {
        newArrInput[i]=arrInput[i];
    }

    for(int i=0;i<newArrInput.length;i++)
    {
        arrInput[arrFrek[newArrInput[i]-offset]-1]=newArrInput[i];
        arrFrek[newArrInput[i]-offset]-=1;
    }
}

我錯過了什么 ?

原因是您在創建數組時傳遞了負索引。 因此,請考慮以下語句:

int[] arrFrek = new int[size];

您將尺寸定義為

this.size = nilaiMax-nilaiMin+1;

因此,您的nilaiMin> nilaiMax並因此獲得了負數組大小異常。 您可以在此處從javadoc閱讀有關異常的信息

還要注意,如果說arrInput[i]為0且offset為2,則您嘗試使用索引-2訪問aray,這就是為什么要使數組索引超出綁定異常的原因。 請注意,數組索引從0開始,因此不能為負。

是的,您的代碼中有一個位置可能會導致此異常。

int[] arrFrek = new int[size];

來自javadocs

NegativeArraySizeException
Thrown if an application tries to create an array with negative size.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM