Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用system.currentimemillis测量计算输出所需的时间_Java_Time_Java.util.scanner - Fatal编程技术网

Java 使用system.currentimemillis测量计算输出所需的时间

Java 使用system.currentimemillis测量计算输出所需的时间,java,time,java.util.scanner,Java,Time,Java.util.scanner,我有一个java项目要做,要求如下: 创建一个循环,重复以下实验10次。完成所有10次迭代后,打印一次实验迭代的平均时间: 选择一个从0到n的随机数r 使用System类,记下实验的开始时间 在循环中重复乘以两个9位数的值进行r次迭代。你不需要保留 这个乘法的结果 记下实验的结束时间 这就是我到目前为止所做的: package lee_lab02; import java.util.Random; import java.util.Scanner; public class Benchm

我有一个java项目要做,要求如下:

创建一个循环,重复以下实验10次。完成所有10次迭代后,打印一次实验迭代的平均时间:

  • 选择一个从0到n的随机数r
  • 使用System类,记下实验的开始时间
  • 在循环中重复乘以两个9位数的值进行r次迭代。你不需要保留 这个乘法的结果
  • 记下实验的结束时间

这就是我到目前为止所做的:

package lee_lab02;
import java.util.Random;
import java.util.Scanner;

public class Benchmark {

public Benchmark() {
}

public static void main(String[] args) {
    System.out.println("Please enter a value for n:");
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    long start = System.currentTimeMillis();
    for(int i=1; i<=10; i++)
    {

        Random rand = new Random();
        double r = rand.nextInt(n);
        for(int z=1;z<r;z++)
        {
            long num1 = 145893123;
            long num2 = 901234278;
            long num3 = num1 * num2;
        }
    }
    long end = System.currentTimeMillis();
    long totTime = end - start;
    long avg = totTime/10;
    System.out.println(avg);
}

}
lee_lab02包装;
导入java.util.Random;
导入java.util.Scanner;
公共课基准{
公共基准(){
}
公共静态void main(字符串[]args){
System.out.println(“请输入n:”)的值;
扫描仪扫描=新扫描仪(System.in);
int n=scan.nextInt();
长启动=System.currentTimeMillis();

for(int i=1;i您的程序没有问题。只是您在
for
循环中执行的琐碎操作根本不需要花费太多时间。所有迭代都在不到1毫秒的时间内完成。只需添加
Thread.sleep(500)
for
循环中,您将看到平均值按预期打印出来


另外,对
avg
使用
double
double avg=totTime/10.0;
)。

要执行这种基准测试,最好使用
nanoTime()
(记住1000纳秒=1ms(
currentTimeMillis
),除非您的程序在这种情况下花费的时间超过10秒,否则以毫秒为单位的get时间足够(但仍然可以使用
nanoTime()
):

long start=System.nanoTime();
int nbRound=10;
对于(int i=1;i
105 673ns
  • n=100000
    ==>
    1720963ns(1.7ms)
  • scan.nextInt()方法是一种阻塞方法。因此,当前线程阻塞,代码永远不会向前移动以执行剩余的代码行


    您需要稍微更改设计以处理此nextInt()方法的阻塞。您可以在另一个线程中调用nextInt()方法,在另一个线程中调用其余逻辑,并可以控制它们的处理,以便运行平均时间计算逻辑。

    时间未被记录,或者时间为0?
    long start = System.nanoTime();
    int nbRound = 10;
    for (int i = 1; i <= nbRound; i++) {
       //...
    }
    long end = System.nanoTime();
    long totTime = end - start;
    long avg = totTime / nbRound;
    System.out.println(avg);