2017-08-29 186 views
0

我的目標是將ar []數組中的元素移動到排序後的[]數組中,並將它們從最小排序到最大排序。我對這個部分有問題,但是因爲我的循環應該找到數組中的最小元素,然後用大數來替換元素。我想我大部分的代碼都被關閉了,但是當我運行這個程序時,排序的[]數組中的每個元素都是2.我在這裏做了什麼錯誤?從一個陣列排序到另一個陣列,Java

public class Lab1 
{ 
    public static void main(String argv[]) 
    { 
     int ar[]  = { 7, 5, 2, 8, 4, 9, 6 }; 
     int sorted[] = new int[ar.length]; 
     int smallest = ar[0]; 
     int smallestindex = 0; 

     for (int i=0; i<ar.length; i++) 
     { 
      for (int n=0; n<ar.length; n++) 
      { 
       if (ar[n] < smallest) 
       { 
        smallest = ar[n]; 
        smallestindex = n; 
       } 
      } 

      sorted[i] = smallest; 
      ar[i] = 1000000; 
     } 

     // print sorted array: 
     for (int i=0; i<sorted.length; i++) 
     { 
      System.out.println("sorted[" + i + "] = " + sorted[i]); 
     } 
    } 
} 
+1

只需在排序之前製作數組的副本。 – crook

+0

注意內部循環沒有提及'我'?爲什麼其結果會因索引而改變? – shmosel

+0

這是一個糟糕的代碼'ar [i] = 1000000;'此外,爲什麼要將排序的元素放在另一個數組中?如果您想保留原件,只需複製原件並在當前陣列上工作即可。 – user3437460

回答

0

我沒有我的電腦,但現在我認爲問題是,一旦你設置變量最小2第一次,它永遠是2,有沒有其他一些較小。所以我認爲你正在執行的內部,如果只是一次,值總是2.

編輯。我認爲把最小化的拳頭移動到拳頭之下應該是有效的。

0

當這種情況不正確時,您沒有采取任何行動。

if (ar[n] < smallest) 

所以只是最小的元素可以通過這個檢查,並繼續新的數組。

你也可以像這樣

List<Integer> ar = Arrays.as list (*your numbers here*); 

Collections.sort(ar):

0

看來要通過使用所謂的「選擇排序」算法排序更好的形狀排序的數組,但你的代碼是一個實現不良。

你可以從這個兄弟的問題,學習和檢查下面的答案: Selection Sort Example

0

哎呀,有你的循環, 裏面一個問題,複製最小的AR []進入整理[],這是2, 所以你在排序的[]中的每個元素中得到2。

for (int i=0; i<ar.length; i++) 
    { 
     for (int n=0; n<ar.length; n++) 
     { 
      if (ar[n] < smallest) 
      { 
       smallest = ar[n]; <----YOU ALWAYS GET 2 HERE 
       smallestindex = n; 
      } 
     } 

     sorted[i] = smallest; <---- AND SET 2 TO YOUR sorted[] HERE 
     ar[i] = 1000000; 
    } 

我不知道,如果你想一個解決方案或自己解決問題,因爲你的問題是問什麼是錯的,但在這裏它是

for (int i=0; i<ar.length; i++) 
    { 
     for (int n=0; n<ar.length; n++) 
     { 
      if (ar[n] < smallest) 
      { 
       smallest = ar[n]; 
       smallestindex = n; 
       ar[n] = 1000000; <----CHANGE THE SMALLEST ITEM HERE RATHER THAN OUTSIDE 
      } 
     } 

     sorted[i] = smallest;    
    } 

順便說一句,在一個容易做出的排序副本方法:

Firsy進行復制:

int[] sorted = ar.clone(); 

然後,排序它使用Java的Util:

Arrays.sort(sorted); 

只是2行你得到你想要的。

0

這樣的事情呢?

簡短而親切:

import java.util.Arrays; 

public class Lab1 
{ 
    public static void main(String argv[]) 
    { 
     int ar[]  = { 7, 5, 2, 8, 4, 9, 6 }; 
     int sorted[] = ar.clone(); 
     Arrays.sort(sorted); 

     System.out.println("Original array: " + Arrays.toString(ar)); 
     System.out.println("Sorted array: " + Arrays.toString(sorted)); 
    } 
} 

輸出:

Original array: [7, 5, 2, 8, 4, 9, 6] 
Sorted array: [2, 4, 5, 6, 7, 8, 9] 
0

我只是不明白,爲什麼我們需要這個,想整理到另一個陣列。您可以使用Arrays.sort()方法在陣列中進行排序,或者如果要排序在不同的陣列,可以採取以下步驟:

  1. 副本的陣列到新的數組。

  2. 對新數組進行排序然後排序。

如果你還想和你的實現一起去,那麼我已經重構了你的代碼。現在您的代碼工作正常,如下所示:

public class Prog1 { 
    public static void main(String[] args) { 
     int ar[] = { 7, 5, 2, 8, 4, 9, 6 }; 
     int sorted[] = new int[ar.length]; 
     int smallest = ar[0]; 
     int smallestindex = 0; 

     for (int i = 0; i < ar.length; i++) { 
      for (int n = 0; n < ar.length; n++) { 
       if (ar[n] < smallest) { 
        smallest = ar[n]; 
        smallestindex = n; 
       } 
      } 

      sorted[i] = smallest; 
      //Your mistake was here. 
      ar[smallestindex] = 1000000; 
      smallest=ar[0]; 
      smallestindex=0; 
     } 

     // print sorted array: 
     for (int i = 0; i < sorted.length; i++) { 
      System.out.println("sorted[" + i + "] = " + sorted[i]); 
     } 
    } 

} 

您的錯誤是您沒有重新分配'最小'變量。因爲它指向數組的最小元素,所以它在下次運行時不會更新,因爲數組中的元素不會少於此變量。希望你得到它。如果還有問題,請詢問。

0

因爲每次擊碎舊值(大值)並且不保存它以便移位
smallest = ar [n]; smallestindex = n;您需要添加另一個變量來更改單元格之間的值,或者使用arraylist來實現簡單的方法。

int ar[] = {7, 5, 2, 8, 4, 9, 6}; 
    int sorted[] = new int[ar.length]; 
    int smallest = ar[0]; 
    for (int i = 0; i < ar.length ; i++) { 

     for (int j = i + 1; j < ar.length; j++) { 

      if (ar[i] > ar[j]) { 

       smallest = ar[j]; //save small value 
       ar[j] = ar[i];//transaction between two comparables cells 
       ar[i] = smallest;//set small value as first 

      } 
      sorted[i]=ar[i]; //set first small value 
     } 

    } 

    // print sorted array: 
    for (int i = 0; i < sorted.length; i++) { 
     System.out.println("sorted[" + i + "] = " + sorted[i]); 
    }