随机数排序数组

时间:2017-06-21 23:50:28

标签: java

对于我的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;

    }



    }

它只是打印出一堆数字和单词&#34;偶数是&#34;和&#34;奇数是&#34;。我应该在代码中修复哪些内容才能完成我的任务?

2 个答案:

答案 0 :(得分:1)

您的代码似乎没问题,但您错过了正确的排序方法,升序或降序非常重要,但在这种情况下,您选择对数组进行排序的算法是未知的。让我向您介绍最差方法对数组进行排序, bubble-sort 还有很多其他方法,如插入排序,合并排序,QuickSort,BucketSort等等,内置的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 [])定义< / p>

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;
}

如果有任何问题,请打开以进一步提问,但所有这一切都应该适合您

答案 1 :(得分: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()]);
    }
}