Вызов алгоритма сортировки в программе драйвера - PullRequest
0 голосов
/ 22 мая 2018

Я довольно новичок в Java, и у меня есть вопрос относительно синтаксиса при вызове файла класса в отдельном файле класса.Итак, у меня есть следующий алгоритм сортировки:

import java.util.Random;

public class MergeSort {
   private int[] data;
   private static final Random generator = new Random();

   public MergeSort( int size ) {
      data = new int[ size ];

      for ( int i = 0; i < size; i++ )
         data[ i ] = 10 + generator.nextInt( 90 );
   }


   // call this method from main program
   public void sort() {
      sortArray( 0, data.length - 1 );
   }


   private void sortArray( int low, int high ) 
   {
      if ( ( high - low ) >= 1 ) {
         int middle1 = ( low + high ) / 2; 
         int middle2 = middle1 + 1;

         sortArray( low, middle1 ); 
         sortArray( middle2, high );

         merge ( low, middle1, middle2, high );
      }
   } 


   private void merge( int left, int middle1, int middle2, int right ) 
   {
      int leftIndex = left; 
      int rightIndex = middle2;
      int combinedIndex = left;
      int[] combined = new int[ data.length ];

      while ( leftIndex <= middle1 && rightIndex <= right ) {
         if ( data[ leftIndex ] <= data[ rightIndex ] )
            combined[ combinedIndex++ ] = data[ leftIndex++ ]; 
         else 
            combined[ combinedIndex++ ] = data[ rightIndex++ ];
      }

      if ( leftIndex == middle2 )
         while ( rightIndex <= right )
            combined[ combinedIndex++ ] = data[ rightIndex++ ];
      else
         while ( leftIndex <= middle1 ) 
            combined[ combinedIndex++ ] = data[ leftIndex++ ];      

      for ( int i = left; i <= right; i++ )
         data[ i ] = combined[ i ];
   } 

}

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

import java.util.Arrays;
import java.util.Random;


public class Sorting
{
    public static void main(String args[]){

        size=50;
   int[] data= MergeSort(size);

   System.out.println(data);


 }
}

Что мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Вы должны сначала создать экземпляр вашего класса, например MergeSort sorter = MergeSort(size);.Затем вызовите метод sort() метод созданного экземпляра, как я вижу, и получите возвращаемое значение.Для прямой печати массива вы можете использовать System.out.println(Arrays.toString(data));.Также измените тип возврата вашего sort() метода на int [] и верните окончательный отсортированный массив.В целом исправленный код в основном методе должен выглядеть примерно так:

public class Sorting
{
    public static void main(String args[]){
     int size=50;
     MergeSort sorter = MergeSort(size);
     int [] data = sorter.sort();
     System.out.println(Arrays.toString(data));
 }
}

И модифицированный метод sort() будет

public int []  sort() {
  sortArray( 0, data.length - 1 );
  return data;
}
0 голосов
/ 22 мая 2018

Вам необходимо создать экземпляр класса MergeSort, чтобы использовать его.Примерно так:

  public class Sorting
  {
    public static void main(String args[]) {   
      size=50;
      MergeSort sorter = new MergeSort(size);
      sorter.sort();
    }
  }

Вам также понадобится способ вернуть данные вызывающей стороне, например, (в классе MergeSort):

int[] getData() {
  return data;
}
0 голосов
/ 22 мая 2018

Ваш код драйвера должен быть:

int size = 50;
MergeSort mergeSort = new MergeSort(size);
mergeSort.sort();

На данный момент у вас нет доступа к данным, но, возможно, добавьте метод getData() в класс MergeSort:

System.out.println(mergeSort.getData());

Или реализовать toString() в классе MergeSort:

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