Java排序程序混乱

时间:2014-08-09 05:41:52

标签: java class sorting methods

我有一份工作,我正在为我的java课程工作。我们必须创建一个程序,要求用户输入几个整数,然后他们可以选择他们想要使用哪种类型的排序方法(即选择,冒泡和插入)。

方向说明我们应该有一个驱动程序类和一个名为Sorter的类。类排序器将具有用于不同排序选项的方法。

我的问题是,我开始使用插入排序并完成所有操作,并认为简单的部分将它分成不同的类,但我很难做到这一点。我以为我会在"菜单中使用开关"并在下面的方法中为不同的排序算法添加不同的方法。我无法弄清楚如何让它正常工作。任何帮助将不胜感激。

另外,我的插入排序看起来不错吗?我认为使用数组列表而不是固定数组会更好,事实证明这比我想象的更难。

这是我的代码......

驱动程序类

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Iterator;

public class DriverSort {

public static void main(String[] args) {

    Scanner scan =new Scanner(System.in);
    /* System.out.println("1-Insertion sort\n"
                    +"2-Selection sort\n"
                    + "3-Bubble sort\n"
                    + "0-quit\n"
                    + "Please enter the number for a sorting method or enter 0 to quit: ");
    option = scan.nextInt(); */

     //Instantiate and call Insertion sort. 

    String list="";

    ArrayList<Integer> arrlist=new ArrayList<Integer>();
    System.out.println(" ");
    System.out.println(" ");
    System.out.println("Welcome to the sorting application menu, the following sorting" 
            + "methods are available: ");
    System.out.println("Please enter the list of elements: ");
    System.out.println(" write 'STOP' when list is completed ");


    while(!(list=scan.nextLine()).equalsIgnoreCase("stop")){
        int intelement = Integer.parseInt(list);
        arrlist.add(intelement);           
    }

    int elementlist[]  = new int[arrlist.size()];
    Iterator<Integer> iter = arrlist.iterator();
    for (int j=0;iter.hasNext();j++) {
        elementlist[j] = iter.next();
    }

    elementlist = Sorter.insertionSort(elementlist);
    System.out.println(" ");
    System.out.println(" ");
    System.out.println(" ");
    System.out.println("Values after Insertion Sort : ");
    for (int j=0;j<elementlist.length;j++) {
        System.out.print(elementlist[j]+" ");
    }
  }
}

分拣机类

public class Sorter {

public int getMenu() {
    int option = 0;

    switch (option) {

    case 0:
        System.out.println("Goodbye!");
        System.exit(0);
        break;

    case 1: //Insertion Sort    

        //method for insertion algorithm
        public static int[] insertionSort(int[] list) {
            for (int i = 1; i < list.length; i++) {
                int next = list[i];
                // find the insertion location while moving all larger elements up
                int j = i;
                while (j > 0 && list[j - 1] > next) {
                    list[j] = list[j - 1];
                    j--;
                }//end while

                // insert the element
                list[j] = next;
            }//end for loop
            return list;
        }//end insertionSort



    }//end switch
  } 
} 

2 个答案:

答案 0 :(得分:2)

嗯,我认为你对设计而不是代码更加困惑。无论如何,您可以轻松找到sorting implementations on the web,所以我会尽力帮您完成设计。

public class DriverSort {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        private static Sorter sorter = new Sorter();

        // blah blah blah
        // take the input in an array or alist

        int choice;  // variable which says which sorting algorithm to use
        int[] arr;   // list of inputs to be sorted

        switch (choice) 
        {
            case 0: sorter.InsertionSort(are);
                    sorter.print(arr);
                    break;

            case 1: sorter.QuickSort(arr);
                    sorter.print(arr);
                    break;

            // and so on…

            default:
                    break;
        }
        }
    }
}

保持Driver类独立于任何排序和打印逻辑。处理Sorter类中的那段代码。

public class Sorter {

    public int[] InsertionSort(int[] arr)
    {
        // implement specific sorting logic
        return arr;
    }

    public int[] SelectionSort(int[] arr)
    {
        // implement specific sorting logic
        return arr;
    }

    public int[] QuickSort(int[] arr)
    {
        // implement specific sorting logic
        return arr;
    }

    public int[] ShellSort(int[] arr)
    {
        // implement specific sorting logic
        return arr;
    }

    public void print(int[] arr)
    { 
    }
} 

答案 1 :(得分:1)

描述不是很清楚,但这是一种方法:

应该写一个抽象类(或接口)Sorter,它有一个抽象方法&#39; void sort(int [] list)`。然后你编写三个扩展(或实现)Sorter的类,一个用于排序方法;这里方法sort实际上实现了算法。

&#34;驱动程序&#34;进行对话,创建一个Sorter子类实例并调用sort。

public abstract class Sorter {
     public abstract void sort( int[] list );
}

public class InsertionSorter extends Sorter {
    public void sort( int[] list ){
         // implement insertion sort
    }
}

public class Driver {
    public void sortUsing(){
         int iSort = ...;
         int[] list = ...; 
         Sorter sorter = null;
         switch( iSort ){
         case 1:
             sorter = new InsertionSorter();
             break;
         // cases 2, 3,...
         default:
             throw ...;
         }
         sorter.sort( list );
    }        
}