2016-02-25 85 views
1

我試圖做一個接受任何數據類型(Int,Double,String)的插入排序程序,然後打印排序的數組。我知道我的代碼工作,但我無法弄清真正的問題。插入排序 - 如何接受輸入並打印排序的數組

import java.util.*; 
public class MyInsertionSort 

{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     System.out.print("Enter anything you want"); 
     String insertionSort = in.nextLine(); 
     int num=Integer.parseInt(insertionSort); 
     String array[] = new String [num]; 
     for (int i = 0; i < array.length; i++) 
     { 
      System.out.print("Input the Number at array index "+i+": "); 
      array[i] = in.nextLine(); 
     } 

    public static void insertionSort(int array[]) 
    { 
     int n = array.length; 
     for (int j = 1; j < n; j++) 
     { 
      int key = array[j]; 
      int i = j-1; 
      while ((i > -1) && (array [i] > key)) 
      { 
       array [i+1] = array [i]; i--; 
      } 
      array[i+1] = key; 
      printNumbers(array); 
     } 
    } 
} 
+1

這個網站是爲回答問題不發現問題。找到有什麼問題,然後我們可以回答它:s –

+2

您在'public static void insertionSort(int array [])'之前缺少一個大括號。你應該學會正確地縮進你的代碼,以便這些錯誤更加明顯。 –

+0

你應該檢查出通用方法的參數或使用方法重載,因爲你的代碼工作..這將是很容易,我猜 – Eliethesaiyan

回答

0

通用型插入排序

我做了一個快速檢查,並固定所有的錯誤。只需比較你的代碼和這個比較工具。這樣你就可以知道你錯過了什麼。此代碼能夠對多個數據類型進行排序,如現在的字符串,double,int。對於任何實現可比較的對象,它都可以改變。

下面是工作代碼

import java.util.Scanner; 
public class MyInsertionSort 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 

     System.out.print("Enter data type to sort : "); 
     String type = in.nextLine(); 

     System.out.print("Enter number of elements : "); 
     String insertionSort = in.nextLine(); 
     int num=Integer.parseInt(insertionSort); 
     String array[] = new String[num]; 
     for (int i = 0; i < array.length; i++) 
     { 
      System.out.print("Input the Number at array index "+i+": "); 
      array[i] = in.nextLine(); 
     } 
     MyInsertionSort.insertionSortByType(array,type); 
     in.close(); 
    } 


    public static void insertionSortByType(String array[], String type) 
    { 
     switch (type) { 
      case "double": 
       Double[] ConvertedArrayDouble = new Double[array.length]; 
       for (int i = 0; i<array.length; i++) ConvertedArrayDouble[i] = Double.parseDouble(array[i]); 
       MyInsertionSort.insertionSort(ConvertedArrayDouble); 
       break; 
      case "int": 
       Integer[] ConvertedArrayInt = new Integer[array.length]; 
       for (int i = 0; i<array.length; i++) ConvertedArrayInt[i] = Integer.parseInt(array[i]); 
       MyInsertionSort.insertionSort(ConvertedArrayInt); 
       break; 
      default: 
       MyInsertionSort.insertionSort(array); 
     } 
    } 

    public static <E extends Comparable<? super E>> void insertionSort(E array[]) 
    { 
     int n = array.length; 
     for (int j = 1; j < n; j++) 
     { 
      E key = array[j]; 
      int i = j-1; 
      while ((i > -1) && (array[i].compareTo(key) > 0)) 
      { 
       array [i+1] = array [i]; i--; 
      } 
      array[i+1] = key; 
     } 

     printNumbers(array); 
    } 

    public static <E> void printNumbers(E array[]) { 
     for (E i : array) { 
      System.out.println(i); 
     } 
    } 
} 
+1

OP表示他希望能夠採用「任何數據類型」,但該代碼只讀取「ints」(使用'nextInt()')。他有問題,但你已經採取了不同的方向。 –

+0

@ ErickG.Hagstrom我已經更新了我的答案,將泛型類型作爲輸入和排序。你可以請現在檢查嗎? – Thanga

+0

你正在爲此付出很多努力。我尊重。只要我們知道用戶想要分類什麼樣的數據,即'數組'的類型,你的方法看起來很合理。 –