Java Домашнее задание MaxSumTest - PullRequest
1 голос
/ 15 февраля 2012

В настоящее время я пытаюсь пересмотреть программу Java Homework для моего класса Data Structures, который отображает выходные данные программы MaxSumTest в таблице.

Я создал четыре массива и поместил их в один из циклов, который вычисляет информацию о времени. Я пытаюсь заполнить каждый массив только информацией о времени для одного алгоритма. Таким образом, каждый массив будет иметь 4 элемента. Однако каждый раз, когда я запускаю ревизию программы, я получаю сообщение об ошибке.

Вот оригинал

Единственный метод, который я пересмотрел, - это 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 ]

2 голосов
/ 15 февраля 2012

Разве строки, которые обновляют элементы массива, не должны находиться во внутреннем цикле?

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

Вы присваиваете их вне цикла, где значение index равно 5, поэтому оно внеграницы.

1 голос
/ 15 февраля 2012

Я не совсем уверен, что именно вы пытаетесь сделать, но я думаю, что вы действительно хотите сделать, это назвать getTimingInfo() несколько раз, а затем присвоить результаты таблице, а не изменить внутреннюю работуgetTimingInfo().

Для этого необходимо определить массивы, в которых вы будете хранить данные синхронизации ВНЕ getTimingInfo(), и тогда единственное изменение внутри getTimingInfo() будет сохранено в этом (уже определено)массив, а не печать.

1 голос
/ 15 февраля 2012
long[] alg1;
alg4 = new long[5];

Может быть лучше выражено как

long[] alg1 = new long[5];

maxSubSum3( test );

Написано лучше, как

maxSubSum3(test);

int j;
int index = 0;

На самом деле сделать то же самое.

Просто выбрать несколькоточек.

0 голосов
/ 15 февраля 2012

Вы устанавливаете alg4, alg3, alg2 и alg1 на размер 5, а не на размер 4, как вы сказали, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...