将双数组值的格式设置为小数点后一位

时间:2018-11-08 03:48:48

标签: java arrays formatting

我找不到将数组内部格式化到小数点后一位的有效方法。

然后,在代码结尾处,我有一个秒表问题,以跟踪根据数组大小处理冒泡排序需要多长时间。

import java.util.Arrays;
import java.util.Random;

public class BubbleSortTest {
    public static void sort(double arr[]) {
        int arrayLength = arr.length;
        for (int i = 0; i < arrayLength-1; i++) {
            for (int j = 0; j < arrayLength-i-1; j++) {
                if (arr[j] > arr[j+1]) {
                    //swap temp and arr[i]
                    double temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }

/* Prints the array */
public static void printArray(double arr[]) {
    int arrayLength = arr.length;
    for (int i = 0; i < arrayLength; ++i) {
        System.out.print(arr[i] + " ");
    }
    System.out.println();
}

public static void generateDoubleArray(double arr[], int length) {
    //generating random values
    Random rand = new Random();
    for(int i = 0; i < length; i++) {
        arr[i] = (rand.nextDouble() * (100 - 0)) + 0;
    }

}

public static void main(String args[]) {

    BubbleSortTest ob = new BubbleSortTest();
    int length = 3; //change the length according to requirement
    double arr[] = new double[length]; // Ex) {6.1, 4.2, 3.3, 7.4, 5.5, 2.6, 8.7, 1.8};
    BubbleSortTest.generateDoubleArray(arr, length);
    System.out.println("BEFORE BUBBLE SORT: "+ Arrays.toString(arr));
    BubbleSortTest.sort(arr);
    System.out.println("AFTER BUBBLE SORT: "+ Arrays.toString(arr));

    StopWatch s = new StopWatch();
    double[] a;

    for(int i = 1; i <= 10; i++) {
        a = BubbleSortTest.generateDoubleArray(i * 20000, i*30000);
        s.start();
        sort(a);
        s.stop();
        System.out.println("Size: " + i*1000 + "\t\tTime: " +s.elapsedTime());
    }
}
   // Size: 1000        Time: 0.0
   // Size: 2000        Time: 0.0
   // Size: 3000        Time: 0.0
   // Size: 4000        Time: 0.0
   // Size: 5000        Time: 0.0
   // Size: 6000        Time: 0.0
   // Size: 7000        Time: 0.0
   // Size: 8000        Time: 0.0
   // Size: 9000        Time: 0.0
   // Size: 10000       Time: 0.0

 // Output with length of array = 3 
 // BEFORE BUBBLE SORT: [56.24793454034215, 1.3614871074902335,17.853054450932547]
  //AFTER BUBBLE SORT: [1.3614871074902335,17.853054450932547,56.24793454034215]

1 个答案:

答案 0 :(得分:0)

因此,您没有调用printArray方法...

没有一种在数字数组中格式化双精度格式的方法。如果要使用Arrays.toString

,则必须使用格式值创建一个新的String数组,然后打印该数组。

如果使用自己的方法,则可以在Best way to Format a Double value to 2 Decimal places上查看几种解决方案

关于错误,尚不清楚您期望generateDoubleArray(i * 20000, i*30000);做什么,但是第一个参数必须是双精度数组,而不是数字,并且该方法本身不返回任何内容,因此您不会不能做a = BubbleSortTest.generateDoubleArray

也许您想要这样的东西

static Random rand = new Random();

public static double[] generateDoubleArray(int length){
    double arr[] = new double[length];
    for(int i = 0; i<length;i++) {
        //generating random values
        arr[i] = rand.nextDouble() * 100;
    }
    return arr;
}

除此之外,输出中的("Size: " + i*1000 +与您要创建的length参数相距很远