我有一份工作,我正在为我的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
}
}
答案 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 );
}
}