JAVA编程执行多次

Posted

技术标签:

【中文标题】JAVA编程执行多次【英文标题】:JAVA Programming Execute Multiple Times 【发布时间】:2012-12-07 08:19:51 【问题描述】:

我编写了一个 BubbleSort 程序,它工作得很好,给了我很好的输出并且充分地完成了它的工作。但是我无法在整理一次后重新执行程序。 IE。程序完成了 10000 个唯一的数字,并输出了它所花费的时间和所花费的步数,但不再执行,比如说再执行 999 次?

简而言之,谁能帮我让我的程序自己运行 1000 次,这样我就能得到平均执行时间?

代码如下:

public class BubbleSort 
   public static void main(String[] args) 
      int BubArray[] = new int[]  #10000 unique values unsorted# ;

      System.out.println("Array Before Bubble Sort");
      for (int a = 0; a < BubArray.length; a++) 
         System.out.print(BubArray[a] + " ");
      

      double timeTaken = bubbleSortTimeTaken(BubArray);
      int itrs = bubbleSort(BubArray);
      System.out.println("");
      System.out.println("Array After Bubble Sort");
      System.out.println("Moves Taken for Sort : " + itrs + " moves.");
      System.out.println("Time Taken for Sort : " + timeTaken
            + " milliseconds.");
      for (int a = 0; a < BubArray.length; a++) 
         System.out.print(BubArray[a] + " ");
      
   

   private static int bubbleSort(int[] BubArray) 

      int z = BubArray.length;
      int temp = 0;

      int itrs = 0;

      for (int a = 0; a < z; a++) 
         for (int x = 1; x < (z - a); x++) 

            if (BubArray[x - 1] > BubArray[x]) 

               temp = BubArray[x - 1];
               BubArray[x - 1] = BubArray[x];
               BubArray[x] = temp;

            

            itrs++;
         
      

      return itrs;
   

   public static double bubbleSortTimeTaken(int[] BubArray) 
      long startTime = System.nanoTime();
      bubbleSort(BubArray);
      long timeTaken = System.nanoTime() - startTime;
      return timeTaken;
   

这是结果输出(注意它仅限于一次运行):

Unsorted List : 
[13981, 6793, 2662, 733, 2850, 9581, 7744 .... ]
Sorted List with BubbleSort

Moves Taken to Sort : 1447551 Moves.
Time Taken to Sort : 1.2483121E7 Milliseconds.

[10, 11, 17, 24, 35, 53, 57, 60, 78, 89, 92 ... ]

【问题讨论】:

用新方法提取main()代码并调用相同的1000次有什么问题? 【参考方案1】:

编辑的代码...

public class BubbleSort 
    static double bestTime = 10000000, worstTime = 0;  //global variables
public static void main(String[] args) 
    int BubArray[] = new int[]3,5,3,2,5,7,2,5,8;

    System.out.println("Array Before Bubble Sort");
    for(int a = 0; a < BubArray.length; a++)
    System.out.print(BubArray[a] + " ");

    

  System.out.println("\n Entering Loop...");

  for(int i=0; i<1000;i++)
    
  bubbleSortTimeTaken(BubArray, i);
  


        int itrs = bubbleSort(BubArray);
        System.out.println("");               
        System.out.println("Array After Bubble Sort");
        System.out.println("Moves Taken for Sort : " + itrs + " moves.");
        System.out.println("BestTime: " + bestTime + " WorstTime: " + worstTime);
        System.out.print("Sorted Array: \n");
            for(int a = 0; a < BubArray.length; a++)
                    System.out.print(BubArray[a] + " ");
            
    

 private static int bubbleSort(int[] BubArray) 

    int z = BubArray.length;
    int temp = 0;

    int itrs = 0;

    for(int a = 0; a < z; a++)
            for(int x=1; x < (z-a); x++)

                    if(BubArray[x-1] > BubArray[x])

                            temp = BubArray[x-1];
                            BubArray[x-1] = BubArray[x];
                            BubArray[x] = temp;
                        

                    itrs++;
            
    

    return itrs;


public static void bubbleSortTimeTaken(int[] BubArray, int n) 


     long startTime = System.nanoTime();

     bubbleSort(BubArray);   

     double timeTaken = (System.nanoTime() - startTime)/1000000d;

     if(timeTaken > 0)
     
         if(timeTaken > worstTime)
         
             worstTime = timeTaken;
         
         else if(timeTaken < bestTime)
         
             bestTime = timeTaken;
         

     

     System.out.println("Loop number: "+n + " Time Taken: " + timeTaken);




【讨论】:

有没有办法代替 BubArray = new int array ints; ...也就是说,再次调用 BubArray(999 次)并计算每次...所以 1000 个不同数量的“Time Taken”和“Moves Taken”,这有意义吗? BubArray 的值每次进入循环都会改变?如果是,那么如何?随机? 我的意思是每次执行都有相同的 10000 个唯一值,但我需要计算 1000 次执行的平均时间。 “您可以测量将数据排序 1,000 次所需的时间,然后将此时间除以 1,000 以获得运行排序一次的平均值。” .它是在图表上绘制以找到最差、平均、最佳情况。 并且代码以纳秒为单位打印出时间。您需要除以 10^6 才能获得以毫秒为单位的时间 所以.. 你想运行bubbleSort 1000 次,你需要每次运行的执行时间,并找到最佳和最差的执行时间,对吗?【参考方案2】:

把方法移到下面

private static int bubbleSort(int[] BubArray) 

在扩展Thread 的其他类中。可能您可以在每次执行完成时创建新线程。根类中的静态实例变量可以用来保存时间。

【讨论】:

线程似乎不是问题的要求。无需增加不必要的复杂性。

以上是关于JAVA编程执行多次的主要内容,如果未能解决你的问题,请参考以下文章

Java 网络编程案例二:多态客户端与服务器之间的多次通信

java编程 新账户类(Newaccount)(java继承)

Java 循环

Java 循环

《Java面向对象编程第二版》即将出版

《Java编程思想》第十三章 字符串