2016-09-12 12 views
-1

こんにちは私は自分のコードに問題があります。私のプログラムは、マージソートを使ってユーザーが入力した値をソートする必要があります。ここに私のコードです。n個の値の配列をソートするためにマージソート

public class mergeSort { 

private int[] inputArray; 
private int[] tempMergeArray; 
private int length; 

public static void main (String args[]) 
{ 
    Scanner scanner = new Scanner(System.in); 
    System.out.println("Enter size of your array"); 
    int n = scanner.nextInt(); 

    int[] array = new int[n]; 
    System.out.println("Enter numbers: "); 

    for (int i=0; i<array.length; i++){ 
     array[i] = scanner.nextInt(); 
     mergeSort mms = new mergeSort(); 
     mms.sort(array[i]); 
     for (int j:array){ 
     System.out.println(j); 
     System.out.print(" "); 
     } 
    } 
} 

public void sort(int array[]){ 

    this.inputArray = array; 
    this.length = array.length; 
    this.tempMergeArray = new int [length]; 
    doMergeSort(0, length - 1); 
} 
private void doMergeSort(int lowerIndex, int higherIndex) { 

    if (lowerIndex < higherIndex) { 
     int middle = lowerIndex + (higherIndex - lowerIndex)/2; 
     doMergeSort(lowerIndex, middle); 
     doMergeSort(middle + 1, higherIndex); 
     mergeParts(lowerIndex, middle, higherIndex); 
    } 
} 
private void mergeParts(int lowerIndex, int middle, int higherIndex) { 

    for (int i = lowerIndex; i <= higherIndex; i++) { 
     tempMergeArray[i] = inputArray[i]; 
    } 
    int i = lowerIndex; 
    int j = middle + 1; 
    int k = lowerIndex; 
    while (i <= middle && j <= higherIndex) { 
     if (tempMergeArray[i] <= tempMergeArray[j]) { 
      inputArray[k] = tempMergeArray[i]; 
      i++; 
     } else { 
      inputArray[k] = tempMergeArray[j]; 
      j++; 
     } 
     k++; 
    } 
    while (i <= middle) { 
     inputArray[k] = tempMergeArray[i]; 
     k++; 
     i++; 
    } 
} 

これは23行目にエラーがあります。mms.sort(array [i]); は、mergeSort型のメソッドsort(int [])は引数(int)には適用できません。

ありがとうございます!

+1

定義されたメソッドは、intの配列を引数として想定しています。あなたの呼び出しは単一のintを渡します。 – paisanco

答えて

2

あなたの方法を使用すると、メソッドは、配列を期待している単一の入力

for (int i=0; i<array.length; i++){ 
    array[i] = scanner.nextInt(); 
    } 
mergeSort mms = new mergeSort(); 
mms.sort(array); 
1

を渡している配列を渡します。あなたは単一の値array[i]を渡しています。 forループ内の位置[i]の値ではなく、配列全体を渡すので、mms.sort(array)に変更する必要があります。

関連する問題