【问题标题】:Create rows of 10 numbers out of an array with N random numbers从具有 N 个随机数的数组中创建 10 个数字的行
【发布时间】:2017-06-09 11:46:49
【问题描述】:

我正在尝试从具有 N 个按升序排序的随机数的数组中创建具有 10 个数字的行。我已经设法创建了一个包含 N 个随机数的数组,并且我也对它们进行了排序,但我不知道如何将它们打印成 10 个数字的行。任何帮助将不胜感激。

这是我的 N 个随机数的代码:

public class Mergesort {

    private static double[] merge(double[] a, double[] b) {
        double[] c = new double[a.length + b.length];
        int i = 0, j = 0;
        for (int k = 0; k < c.length; k++) {
            if      (i >= a.length) c[k] = b[j++];
            else if (j >= b.length) c[k] = a[i++];
            else if (a[i] <= b[j])  c[k] = a[i++];
            else                    c[k] = b[j++];
        }
        return c;
    }

    public static double[] mergesort(double[] input) {
        int N = input.length;
        if (N <= 1) return input;
        double[] a = new double[N/2];
        double[] b = new double[N - N/2];
        for (int i = 0; i < a.length; i++)
            a[i] = input[i];
        for (int i = 0; i < b.length; i++)
            b[i] = input[i + N/2];
        return merge(mergesort(a), mergesort(b));
    }


   /***************************************************************************
    *  Check if array is sorted - useful for debugging.
    ***************************************************************************/
    private static boolean isSorted(double[] a) {
        for (int i = 1; i < a.length; i++)
            if (a[i] < a[i-1]) return false;
        return true;
    }



    // generate N real numbers between 0 and 1, and mergesort them
    public static void main(String[] args) {
        int N = Integer.parseInt(args[0]);
        double[] a = new double[N];
        for (int i = 0; i < N; i++)
            a[i] = (int)(Math.random() * 100 + 1);
        a = mergesort(a);
        for (int i = 0; i < N; i++)
            StdOut.println(a[i]);

        StdOut.println(isSorted(a));
    }
}

【问题讨论】:

    标签: java arrays random


    【解决方案1】:

    只需一个循环:

    for (int i = 0; i<array.length;i++){ 
        System.out.print(array[i]);
        if (i%10 == 9) { // if i modulo 10 is 9 add an linebreak
           System.out.println();
        }
    }
    

    【讨论】:

    • @AtalAtmar 改变了我的答案。请查看
    • 我还有最后一个问题。我的输出仅包含整数。如何删除每个数字后面的 .0?
    • @AtalAtmar 你能告诉我结果和预期结果吗?
    • 例如,如果我为 N 输入 10,结果如下所示:7.0 11.0 13.0 36.0 49.0 51.0 55.0 57.0 94.0。应该是这样的:7 11 13 36 49 51 55 57 94。
    • @AtalAtmar 这是因为你有一个 double 作为数据类型。您可以将其转换为 int 并且小数部分将消失:System.out.print((int)array[i]+" ");
    【解决方案2】:

    使用System.out.print() 而不是System.out.println()

    System.out.println() 会自动在行尾添加“\n”,而System.out.print() 不会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2015-05-12
      • 2020-03-17
      相关资源
      最近更新 更多