2017-06-21 117 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

非常感谢您的帮助 –