Как запустить методы экземпляра из основного - PullRequest
0 голосов
/ 14 октября 2011

Извините, но у меня здесь большой мозг пердит (угадайте, что вам дадут несколько дней мало сна).Не изменяя ничего на статическое, как я могу сделать main (), который будет запускать это.

package merger;

import java.util.Random;

public class another {

    public int[] numbers;
    private final static int size = 100;
    private static int maxNumber = 30;
    private final static int limit = 10;
    public int number;
    private boolean Insertion = false;

    public void arraytosort(){
        numbers = new int[size];
        Random number = new Random();
        for (int i=0; i< numbers.length; i++){
            numbers[i] = number.nextInt(maxNumber);
        }
        test(numbers);
    }

    public void test(int[] array){
        this.numbers = array;
        number = array.length;
        mergesort(0,number - 1);
    }

     public void mergesort(int low, int high){
         if(Insertion || high-low < limit){
             insertionsort(low, high);
             return;
         }
         if (low<high){
             int middle = (low+high) / 2;
             mergesort(low, middle);
             mergesort(middle +1, high);
             merge(low,middle,high);
             return;
         }
     }

     public void merge(int low, int middle, int high){
         int[] temp = new int[number];
         for (int i=low;i<=high; i++){
             temp[i] = numbers[i];
         }
         int i = low;
         int j = middle+1;
         int k = low;
         while (i<=middle || j<=high){
             if (temp[i] <= temp[j]){
                 numbers[k] = temp[i];
                 i++;
             }
             else{
                 temp[k] = temp[j];
                 j++;
             }
             k++;
         }
         while (i<=middle){
             temp[k] = temp[i];
             k++;
             i++;
         }
         temp = null;
         return;
             }

     public void insertionsort(int low, int high){
         for(int i=low+1;i<=high;i++){
             int t = numbers[i];
             for(int j = i-1; j>=low; j--){
                 if(t>numbers[j]) break;
                 numbers[j+1] = numbers[j];

             numbers[j+1] = t;
             }
         }
     }

    /**
     * @param args
     */
    public static void main(String[] args){


    }
}

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

Спасибо

Ответы [ 2 ]

5 голосов
/ 14 октября 2011

Не изменяя ничего на статическое, как я могу сделать main (), который будет запускать это.

Вы должны создать экземпляр класса:

public static void main(String[] args){
    another instance = new another();
    instance.whateverMethodYouLike();
}

Кстати, соблюдайте соглашение Java и называйте классы заглавными буквами.

2 голосов
/ 14 октября 2011
public static void main(String[] args)
{
  another myObject = new another();
  myObject.arraySort(); //will call test which will call mergesort

  myObject.insertionSort(0,myObject.numbers.size()-1); //nothing calls insertion sort

}

ПОЖАЛУЙСТА, соблюдайте следующие условные обозначения кода, такие как ввод заглавной буквы имени класса и camelCasing для методов / переменных.

Если вы хотите увидеть отсортированный вывод, выведите массив на экран.

public переменные плохие, плохие, плохие делают их закрытыми (например, numbers[]) в вашем случае ...

В методе main вы "создаете" экземпляр объекта этого класса и не вызываете напрямуюметоды.Это, так сказать, «особый» метод, отличный от других общедоступных / частных / статических методов ...

Я предлагаю прочитать какую-нибудь элементарную книгу по Java, например мышление на языке Java, которое доступно бесплатно в Интернете ...

...