Java Homework MaxSumTest

时间:2012-02-15 17:51:04

标签: java data-structures

我目前正在尝试修改我的Data Structures类的Java Homework程序,该程序在表中显示MaxSumTest程序的输出。

我创建了四个数组,并将它们放在一个计算时序信息的循环中。我试图用一个算法的时间信息填充每个数组。所以每个数组都有4个元素。但是,每次运行我的程序修订版时,都会出现错误。

Here is the Original

我修改的唯一方法是getTimingInfo。这是我的修订版:

public static void getTimingInfo( int n, int alg )
{
    int [] test = new int[ n ];

    long startTime = System.currentTimeMillis( );;
    long totalTime = 0;



   //create an array for each Algorithm
    long[] alg4;
    long[] alg3;
    long[] alg2;
    long[] alg1;

    //allocate memory for 5 long ints 

    alg4 = new long[5];
    alg3 = new long[5];
    alg2 = new long[5];
    alg1 = new long[5];

   int i;
   int j;
   int index = 0;

   for( i = 0; totalTime < 4000; i++ )
   {
       for( j = 0; j < test.length; j++ )
           test[ j ] = rand.nextInt( 100 ) - 50;
    index = j;
       switch( alg )
       {
         case 1:
           maxSubSum1( test );
           break;
         case 2:
           maxSubSum2( test );
           break;
         case 3:
           maxSubSum3( test );
           break;
         case 4:
           maxSubSum4( test );
           break;
       }

       totalTime = System.currentTimeMillis( ) - startTime;

   }

    alg1[index] = totalTime * 1000 / i;
    alg2[index] = totalTime * 1000 / i;
    alg3[index] = totalTime * 1000 / i;
    alg4[index] = totalTime * 1000 / i;

    //Build first column of table
    System.out.println("Size of N Algorithms\t" + "250\t" + "2500\t" + "25000\t" + "250000");

    System.out.println("Alg #4\t" + alg4[0] + "\t" + alg4[1] + "\t" + alg4[2] + "\t" + alg4[3] + "\t" + alg4[4]);
    System.out.println("Alg #3\t" + alg3[0] + "\t" + alg3[1] + "\t" + alg3[2] + "\t" + alg3[3] + "\t" + alg3[4]);
    System.out.println("Alg #2\t" + alg2[0] + "\t" + alg2[1] + "\t" + alg2[2] + "\t" + alg2[3] + "\t" + alg2[4]);
    System.out.println("Alg #1\t" + alg1[0] + "\t" + alg1[1] + "\t" + alg1[2] + "\t" + alg1[3] + "\t" + alg1[4]);


    /*

    System.out.println( "Algorithm #" + alg + "\t"
         + "N = " + test.length
         + "\ttime = " + ( totalTime * 1000 / i ) + " microsec" );
    */


 }

任何有关正确方向的建议或指示都将受到赞赏。

4 个答案:

答案 0 :(得分:2)

更新数组元素的行不应该在内部循环中吗?

alg1[index] = totalTime * 1000 / i;
alg2[index] = totalTime * 1000 / i;
alg3[index] = totalTime * 1000 / i;
alg4[index] = totalTime * 1000 / i;

你是在循环之外分配它们,index的值是5,所以它超出界限。

答案 1 :(得分:1)

long[] alg1;
alg4 = new long[5];

可以更好地表达为

long[] alg1 = new long[5];

maxSubSum3( test );

写得更好

maxSubSum3(test);

int j;
int index = 0;

实际上做同样的事情。

只是选择几点。

答案 2 :(得分:1)

我不确定你要做什么,但我认为你真正想要做的是多次调用getTimingInfo()然后将结果分配给一个表,而不是改变内部getTimingInfo()

的运作方式

这要求您定义要在其中存储getTimingInfo()的定时数据OUTSIDE的数组,然后getTimingInfo()内部的唯一更改将存储到该(已定义的)数组,而不是比印刷。

答案 3 :(得分:0)

您正在将alg4,alg3,alg2和alg1设置为大小5,而不是您所需要的大小4.