Defc0n
Defc0n

Reputation: 27

How to run instance methods from main

Sorry but I'm having a major brain fart here (guess that's what a few days of little sleep get you). Without changing anything to static how can I make a main() that will run this.

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){


    }
}

I just need to be able to test it to see if this is working. In my head it seems like it should work.

Thanks

Upvotes: 0

Views: 4164

Answers (2)

PhD
PhD

Reputation: 11334

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

}

PLEASE following code conventions like capitalizing first letter of class name and camelCasing for methods/variables.

If you want to see the sorted output, print the array on screen.

public variables is bad, bad, bad make them private (like numbers[]) in your case...

In the main method you "create" the instance of the object of that class and not directly call methods. It's a 'special' method so to speak different from other public/private/static methods...

I suggest reading up on some elementary java book like thinking in java which is available for free online...

Upvotes: 2

aioobe
aioobe

Reputation: 420951

Without changing anything to static how can I make a main() that will run this.

You have to create an instance of the class:

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

BTW, please follow the Java convention and name classes with a capital first letter.

Upvotes: 5

Related Questions