轩辕Shi
如果把frequency设置为int类型的最大值,这个程序的耗时将达到16s,但是cpu占用却不足百分之20,我该如何做才能让java程序更有效率的执行?


package com.yuan.project.tossacoin;

import java.util.Random;
import java.util.Scanner;

public class TossACion {
    public static void main(String[] args) {
        int number = 0;//
        int number2 = 0;
        System.out.print("请输入模拟执行掷硬币的次数:");
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        int frequency = scanner.nextInt();
        long time1 = System.currentTimeMillis();
        for (int i = 0; i < frequency; i++) {
            if (1 == random.nextInt(2)) {
                number += 1;
                number2 += 1;
            } else {
                number2 += 1;
            }
        }
        double percentage = ((double) number / (double) number2) * 100;
        long time2 = System.currentTimeMillis();
        long final_time = time2 - time1;
        if(final_time < 1000){
            System.out.println(final_time + "毫秒");
        }else {
            TossACion.time(final_time);
        }

        System.out.println("这次模拟掷到正面的概率为:" + percentage + "%");
    }

    public static void time(long milliseconds) {
        long minutes = (milliseconds / 1000) / 60;
        long seconds = (milliseconds / 1000) % 60;
        //long millisec = ();
        System.out.println(minutes + "分钟" + seconds + "");
    }
}

2021.12 数据,可能有更多内容如果把frequency设置为int类型的最大值,这个程序的耗时将达到16s,但是cpu占用却不足百分之20,我该如何做才能让java程序更有效率的执行?


package com.yuan.project.tossacoin;

import java.util.Random;
import java.util.Scanner;

public class TossACion {
    public static void main(String[] args) {
  int number = 0;//
  int number2 = 0;
  System.out.print(&quot;请输入模拟执行掷硬币的次数:&quot;);
  Scanner scanner = new Scanner(System.in);
  Random random = new Random();
  int frequency = scanner.nextInt();
  long time1 = System.currentTimeMillis();
  for (int i = 0; i &lt; frequency; i++) {
   if (1 == random.nextInt(2)) {
    number += 1;
    number2 += 1;
   } else {
    number2 += 1;
   }
  }
  double percentage = ((double) number / (double) number2) * 100;
  long time2 = System.currentTimeMillis();
  long final_time = time2 - time1;
  if(final_time &lt; 1000){
   System.out.println(final_time + &quot;毫秒&quot;);
  }else {
   TossACion.time(final_time);
  }


  System.out.println(&quot;这次模拟掷到正面的概率为:&quot; + percentage + &quot;%&quot;);
    }


    public static void time(long milliseconds) {
  long minutes = (milliseconds / 1000) / 60;
  long seconds = (milliseconds / 1000) % 60;
  //long millisec = ();
  System.out.println(minutes + &quot;分钟&quot; + seconds + &quot;&quot;);
    }
}