2014-01-12 101 views
0

我編寫了一個程序,該程序從具有數百組數字(每組有20個數字)的文件中讀取。 程序的重點是要產生每個集合的和,#個偶數,#個奇數。在java中按總和排序輸出

這裏是我的代碼:

public static void main(String args[]) 
{ 


    System.out.println(String.format("%-10s%-10s%-10s", "sum", "even", "odd"));  
    try 
    { 

      FileInputStream fstream = new FileInputStream("data.txt"); 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String strLine; 
      while ((strLine = br.readLine()) != null) { 
       String[] numberStrs = strLine.split("\t"); 
       int[] numbers = new int[numberStrs.length]; 

       for(int i = 0;i < numberStrs.length;i++) 
       { 
        numbers[i] = Integer.parseInt(numberStrs[i]); 
        //System.out.println(numbers[i]); 
       } 
       int sumTotal = sum(numbers); 
       for (int j =0; j<numbers.length;j++) 
       { 
        if (isEven(numbers[j]) == true) 
        { 
         evenCounter++; 
        } 
        else 
        { 
         oddCounter++; 
        } 

       } 
       System.out.println(String.format("%-10s%-10s%-10s", sumTotal, evenCounter, oddCounter + "\n"); 
       } 
       in.close(); 

    }catch (Exception e){//Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
      } 

      } 

現在,輸出數百行3列(總和,偶,奇)。 我的問題是,如何通過總和(偶數和奇數鏈接到總和)對輸出進行排序。

例如:

sum odd even 
404 4  10 
120 21  5 

我要的是排序的總和,並具有:

sum odd even 
120 21 5 
404 4  10 
+1

呃...排序它,而不是立即打印它。 –

+0

如果我把它們放到數組中,那麼如何才能對總和順序進行排序並移動相關的奇數和偶數。 – user3188039

回答

1

您的數據需要存儲,以便以後可以進行排序。要做到這一點,最好的辦法是設計一個類,它的職責是:

  • 存儲數據
  • 排序
  • 維護和與事件&奇數
  • 的理貨表示自己作爲一個字符串

這會使代碼變得複雜一些。這是一個例子。

的點心類:

public class Sum implements Comparable<Sum> 
{ 
    private int sumTotal; 
    private int evenCount; 
    private int oddCount; 

    public void addNumber(int n) 
    { 
     sumTotal += n; 
     if ((n & 0x1) == 0x1) 
     { 
      oddCount++; 
     } 
     else 
     { 
      evenCount++; 
     } 
    } 

    @Override 
    public int compareTo(Sum other) 
    { 
     return Integer.compare(sumTotal, other.sumTotal); 
    } 

    @Override 
    public String toString() 
    { 
     return String.format("%-10s%-10s%-10s", sumTotal, evenCount, oddCount); 
    } 

} 

而且你修改後的代碼:

public static void main(String[] args) 
{ 
    System.out.println(String.format("%-10s%-10s%-10s", "sum", "even", 
      "odd")); 
    try 
    { 
     // The maintained sum list 
     List<Sum> sumList = new ArrayList<Sum>(); 
     InputStream fstream = new FileInputStream("data.txt"); 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine; 
     while ((strLine = br.readLine()) != null) 
     { 
      // Prepare to insert a new sum object 
      Sum newSum = new Sum(); 
      String[] numberStrs = strLine.split("\t"); 
      for (String numberStr : numberStrs) 
      { 
       // The sum object manages its own tallies 
       newSum.addNumber(Integer.parseInt(numberStr)); 
      } 
      // Append the new object to the list 
      sumList.add(newSum); 
     } 
     in.close(); 
     // Sort the list 
     Collections.sort(sumList); 

     // Print the list 
     for (Sum sum : sumList) 
     { 
      /* 
      * The sum object is responsible for generating its own string 
      * representation 
      */ 
      System.out.println(sum); 

     } 
    } 
    catch (Exception e) 
    { 
     // Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 

} 
+0

非常感謝,這對我完全適用。 – user3188039

0

爲了進行排序,你將不得不在某個地方,而不是存儲在打印的計算數據在飛行中。 你可以將它們存儲在一個3×N的數組中,寫一個比較器,只比較它的一個維度,然後用你的比較器對數組進行排序。

例如:

int[][] arr = new int[N][3]; 

// populate arr with data here 

Arrays.sort(arr, new Comparator<int[]>(){ 
    @Override 
    public int compare(int[] o1, int[] o2) {  
     return o1[0] - o2[0]; 
    }      
}); 
+0

但是我怎樣才能排序總和並移動相關的奇數和偶數作爲總和順序移動(更改) – user3188039

+0

我更新了我的答案 –

0

你可以有一組類,在這裏你找齊保存的總和,賠率的數量和數量。您可以保存一組Set,然後您可以按總和對它進行排序(您可以編寫一個簡單的比較器),然後顯示它。