2017-06-21 114 views
-3

對於我的java類,我有這個問題: 編寫一個程序,生成0到25範圍內的100個隨機整數,並將它們存儲在一個數組中。然後,程序應調用一個類方法,將奇數排序到數組中並返回數組。程序應該調用另一種方法將偶數排序到一個單獨的數組中並返回數組。這兩個數組都應該顯示出來。隨機數排序陣列

這是我的代碼:

public class Assignment8 
    { 
     public static void main(String [] args) 
    { 
    int [] randomNums = new int [100]; 
    for (int i = 0; i < randomNums.length; i++) { 
     randomNums[i] = (int) (Math.random() * 26); 
     int[] oddNums = sortOdd(randomNums); 
     System.out.println("The odd numbers are "); 
     for (int n = 0; n<=oddNums.length; n++) { 
     System.out.print(n); 
     } 
     int[] evenNums = sortEven(randomNums); 
     System.out.println("The even numbers are "); 
     for (int o = 0; o<=evenNums.length; o++) { 
     System.out.print(o); 
     } 
    } 
    } 

    public static int[] sortOdd(int[] randomNums) 
     { 
    int numOdds = 0; 
    for (int x : randomNums){ 
     if(x % 2 == 1){ 
     ++numOdds; 
     } 
    } 
    int[] oddNums = new int[numOdds]; 
    int z = 0; 
    for (int n : randomNums){ 
     if(n % 2 == 1){ 
      oddNums[z] = n; 
      z++; 
     } 
    } 
    return oddNums; 


     } 
     public static int[] sortEven(int[] randomNums) 
     { 
    int numEvens = 0; 
    for (int x : randomNums){ 
     if(x % 2 == 0){ 
     ++numEvens; 
     } 
    } 
    int[] evenNums = new int[numEvens]; 
    int z = 0; 
    for (int n : randomNums){ 
     if(n % 2 == 0){ 
      evenNums[z] = n; 
      z++; 
     } 
    } 
    return evenNums; 

    } 



    } 

它只是打印出一堆數字和單詞「The偶數是」和「單號是」。我應該在我的代碼中修復哪些內容才能完成我的任務?

+0

要打印的'for'循環迭代,而不是在排序的值array ...我認爲你的意思是'System.out.print(oddNums [n]);'和'evenNums'一樣... – DigitalNinja

+0

這不是要求人們真的爲你完成作業的地方,我想你最終會爲自己弄明白,只要不斷嘗試。你可能會發現這裏的大多數人都會分享類似的態度,因爲這裏的人希望你爲自己學習,而不是被告知。祝你好運! –

回答

0
import java.util.ArrayList; 
import java.util.List; 

public class Assignment8 
{ 
    public static void main(String [] args) 
    { 
     int [] randomNums = new int [100]; 

     for (int i = 0; i < randomNums.length; i++) 
     { 
      randomNums[i] = (int) (Math.random() * 26); 
      System.out.println(randomNums[i] +"\n"); 
     } 

     Integer[] oddNums = sortOdd(randomNums); 
     System.out.println("The odd numbers are "); 

     for (int n = 0; n< oddNums.length; n++) 
     { 
      System.out.print(oddNums[n] +"\n"); 
     } 

     Integer[] evenNums = sortEven(randomNums); 
     System.out.println("The even numbers are "); 

     for (int o = 0; o< evenNums.length; o++) 
     { 
      System.out.print(evenNums[o] + "\n"); 
     } 
    } 

    public static Integer[] sortOdd(int[] randomNums) 
    { 
     List<Integer> oddNums = new ArrayList<>(); 
     for (int x : randomNums){ 
      if(x % 2 == 1){ 
       oddNums.add(x); 
      } 
     } 
     return oddNums.toArray(new Integer[oddNums.size()]); 
    } 

    public static Integer[] sortEven(int[] randomNums) 
    { 
     List<Integer> evenNums = new ArrayList<>(); 
      for (int x : randomNums){ 
       if(x % 2 == 0){ 
        evenNums.add(x); 
       } 
      } 
     return evenNums.toArray(new Integer[evenNums.size()]); 
    } 
} 
+0

你能解釋一下你改變了什麼,而不是隻發佈一段代碼嗎? – Chris

+0

我錯過了添加排序。但我已經改變了打印奇數和偶數。可以使用差異來看看有什麼變化 – user2073703

+0

對不起,我的意思是在你的文章中,以便其他人可以很容易地看到做了什麼來實現你的答案 – Chris

1

你的代碼看起來很好,但你缺少一個適當的排序方法,升序或降序來說意義不大,但你選擇的數組進行排序算法是在這種情況下是未知的。讓我介紹你到最差方法數組排序,冒泡排序還有許多其他類似插入排序,歸併排序,快速排序,桶排序等等等等,內置Java方法可以處理各種各樣的超快的速度,但是爲了簡單起見,取冒泡排序作爲分選方法,這是它的外觀在代碼

public static void sortArray(int[] data) 
{ 
    for(int x = 0; x < data.length; x++) 
    { 
     for(int y = 0; y < data.length - 1; y++) 
     { 
      if(data[y] < data[y + 1]) 
      { 
       int hold = data[y]; 
       data[y] = data[y + 1]; 
       data[y + 1] = hold; 
      } 
     } 
    } 
} 

只需安排在陣列降序順序。現在,您還想生成一個隨機數組,其元素不超過25個。您應該避免使用生成這樣的數組的方法,因爲您將僅僅使用0,Math.random()是生成浮動點,試試這個方法來產生隨機排列

public static int[] generateRandomArrayWithLimitAndSize(int limit , int size) 
{ 
    final java.util.Random rand = new java.util.Random(); 
    final int[] data = new int[size]; 
    for(int x = 0; x < data.length; x++) 
    { 
     data[x] = rand.nextInt(limit); 
    } 
    return data; 
} 

這裏是你怎麼會去整理甚至是

public static int[] sortEven(int[] data) 
{ 
    int len = 0; 
    int[] copyData; 
    for(int x = 0; x < data.length; x++) 
    { 
     if(data[x] % 2 == 0) 
     { 
      len++; 
     } 
    } 
    copyData = new int[len]; 
    for(int x = 0 , y = 0; x < data.length; x++) 
    { 
     if(data[x] % 2 == 0) 
     { 
      copyData[y++] = data[x]; 
     } 
    } 
    sortArray(copyData); 
    return copyData; 
} 

你可以想像,什麼sortOdd代碼應該看起來像。現在,你可以嘗試嘗試這種

public static void main(String[] args) 
{ 
    int[] myArray = generateRandomArrayWithLimitAndSize(25 , 100); // limit,size 
    System.out.println("Actual Array: " + java.util.Arrays.toString(myArray)); 
    System.out.println("\r\nSorting Evens: \r\n" + java.util.Arrays.toString(sortEven(myArray))); 

    System.out.println("\r\nSorting Odds: \r\n" + java.util.Arrays.toString(sortOdd(myArray))); 

} 

可視化的結果,如果你仍然在面臨的煩惱,您可以想像,什麼sortOdd代碼應該看起來像,那麼這是sortOdd(INT [ ])定義

public static int[] sortOdd(int[] data) 
{ 
    int len = 0; 
    int[] copyData; 
    for(int x = 0; x < data.length; x++) 
    { 
     if(data[x] % 2 != 0) 
     { 
      len++; 
     } 
    } 
    copyData = new int[len]; 
    for(int x = 0 , y = 0; x < data.length; x++) 
    { 
     if(data[x] % 2 != 0) 
     { 
      copyData[y++] = data[x]; 
     } 
    } 
    sortArray(copyData); 
    return copyData; 
} 

打開進一步若有任何問題,但是這一切都應該可以正常工作了,你

+0

非常感謝您的幫助 –