【问题标题】:Sorting an array of 12 randomly generated values [closed]对包含 12 个随机生成的值的数组进行排序 [关闭]
【发布时间】:2016-03-23 03:46:25
【问题描述】:

我正在尝试对一组随机生成的值进行排序,但我认为我可能将这个 arrays.sort 放在错误的位置,或者它没有正确的语法。

有人可以向我解释我需要做什么才能使其正常工作吗?

这是代码。

package name;

import java.util.*;

public class name {

    public static void main(String[] args) {

        int years = isValidInput();

        Random generator = new Random();
        float[] monthsArray = new float[12];

        for (int i = 1; i <= years; i++){
            System.out.println("\nYear " + i + ": ");
            for (int months = 1; months <= 12; months++){
                System.out.println("Month " + months + ": " + generator.nextFloat() * 100);
                Arrays.sort(monthsArray);
            }
        }
}

    public static int isValidInput(){

        Scanner keyboard = new Scanner(System.in);
        System.out.print("Enter the desired number of years: ");
        int years = keyboard.nextInt();

        while (years <= 1 || years >= 80){
            System.out.print("Please enter a number that is greater than 1 and less than 80: ");
            years = keyboard.nextInt();
            System.out.println();
        }
        return years;
        }

    }

【问题讨论】:

  • 请提供样本输入和预期输出
  • 因此,如果我输入 3,那么它会给我第 1 年和 12 个月的随机值,然后为第 2 年和第 3 年提供相同的值。我想要的是那些随机值按从小到大的顺序排序。

标签: java arrays sorting random


【解决方案1】:

目前,您实际上并未在 monthsArray 变量中存储任何内容。你用new float[12] 构造它,但你的随机数只是打印出来然后扔掉。我怀疑你想要这样的东西:

float[] monthsArray = new float[12];
for (int i = 0; i < 12; i++)
    monthsArray[i] = generator.nextFloat() * 100;
Arrays.sort(monthsArray);

请注意,如果您使用的是 Java 8,那么这可能会简单得多:

double[] monthsArray = Random.doubles(12, 0, 100).sorted().toArray();

【讨论】:

    【解决方案2】:

    您可以使用 for 循环来压缩设置 monthsArray。 Arrays.sort() 位于错误的位置,您甚至没有使用monthsArray,但在打印月份时会生成更多随机数。这应该可以满足您查看 last question 的更多目标:为每年生成随机浮点数,对它们进行排序,然后打印出来。

    for(int i = 1; i <= years; i++) {
        for(int i=0; i<monthsArray.length; i++)
            monthsArray[i] = generator.nextFloat()*100;
        Arrays.sort(monthsArray);
        System.out.println("\nYear " + i + ": ");
        for(int month = 1; month <= 12; month++){
            System.out.println("Month " + month + ": " + monthsArray[month]);
    }
    

    要更改它以适合您的评论:

    int[][] randFloats = new int[years][12];
    int[] monthsArray = new int[12];
    for(int i = 1; i <= years; i++) {
        for(int i=0; i<monthsArray.length; i++)
            monthsArray[i] = generator.nextFloat()*100;
        Arrays.sort(monthsArray);
        for(int i=0; i<monthsArray.length; i++)
            randFloats[year-1][i] = monthsArray[i];
        System.out.println("\nYear " + i + ": ");
        for(int month = 1; month <= 12; month++){
            System.out.println("Month " + month + ": " + monthsArray[month]);
    }
    

    【讨论】:

    • 嗯。我几乎整天都在做这件事,所以也许我需要等到明天再做一次,以理清思路。但是,如果我想为每个月生成这些随机值并保持输出与原始帖子中的一样(不添加arrays.sort),但稍后在程序中我想将随机数组值排序为计算中位数、最大值和最小值?
    • 然后你会将monthsArray[]替换成二维数组int[][] randFloats = new int[years][12];
    • 我添加了一个示例,实现了存储每年的浮点数的二维数组。
    • 当我尝试运行它时似乎没有成功。它在第 35 行给了我一个数组越界异常。我已经尝试纠正它,但它仍然给我同样的错误。我明天再试一次。感谢您到目前为止的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2021-05-31
    • 2013-01-13
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    相关资源
    最近更新 更多