2012-04-13 33 views
0

我正在製作一個省分類器,並且要求我必須保持主類不變,並創建一個名爲Munge的私人類,我已經過了好幾個小時,改變了我的代碼幾百次,基本上它看起來像這樣問題從文件中讀取數據並使用2D數組對數據進行排序

安大略省漢密爾頓市
多倫多,安大略省
艾伯塔省埃德蒙頓
紅鹿市,艾伯塔省
一個文本文件中讀取 紐約州聖約翰斯

,並且需要以這樣

阿爾伯塔輸出;埃德蒙頓,Red Deer
安大略省;漢密爾頓,多倫多
紐芬蘭;聖約翰

我的主類是不可改變的,看起來像這樣

public class Lab5 { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    if(args.length < 2) { 
     System.err.println("Usage: java -jar lab5.jar infile outfile"); 
     System.exit(99); 
    } 

    Munge dataSorter = new Munge(args[0], args[1]); 

    dataSorter.openFiles(); 
    dataSorter.readRecords(); 
    dataSorter.writeRecords(); 
    dataSorter.closeFiles(); 
    } 
} 

和Munge時間類我所做的看起來像這樣

package lab5; 

import java.io.File; 
import java.util.Scanner; 
import java.util.Formatter; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.SortedMap; 
import java.util.TreeMap; 

public class Munge 
{ 

private String inFileName, outFileName; 
private Scanner inFile; 
private Formatter outFile; 
private int line = 0; 

private String[] data; 

public Munge(String inFileName, String outFileName) 
{ 
    this.inFileName = inFileName; 
    this.outFileName = outFileName; 

    data = new String[100]; 
} 

public void openFiles() 
{ 
    try 
    { 
     inFile = new Scanner(new File(inFileName)); 
      File file = new File("input.txt"); 
      SortedMap<String, List<String>> map = new TreeMap<String, List<String>>(); 
      Scanner scanner = new Scanner(file).useDelimiter("\\n"); 
     while (scanner.hasNext()) { 
      String newline = scanner.next(); 
      if (newline.contains(",")) { 
      String[] parts = newline.split(","); 
      String city = parts[0].trim(); 
      String province = parts[1].trim(); 
      List<String> cities = map.get(province); 
      if (cities == null) { 
       cities = new ArrayList<String>(); 
       map.put(province, cities); 
      } 
      if (!cities.contains(city)) { 
       cities.add(city); 
      } 
      } 
     } 
      for (String province : map.keySet()) { 
       StringBuilder sb = new StringBuilder(); 
       sb.append(province).append(": "); 
       List<String> cities = map.get(province); 
       for (String city : cities) { 
        sb.append(city).append(", "); 
       } 
       sb.delete(sb.length() - 2, sb.length()); 
       String output = sb.toString(); 
       System.out.println(output); 
      } 
    } 
    catch(FileNotFoundException exception) 
    { 
     System.err.println("File not found."); 
     System.exit(1); 
    } 
    catch(SecurityException exception) 
    { 
     System.err.println("You do not have access to this file."); 
     System.exit(1); 
    } 

    try 
    { 
     outFile = new Formatter(outFileName); 
    } 
    catch(FileNotFoundException exception) 
    { 
     System.err.println("File not found."); 
     System.exit(1); 
    } 
    catch(SecurityException exception) 
    { 
     System.err.println("You do not have access to this file."); 
     System.exit(1); 
    } 
} 

public void readRecords() 
{ 
    while(inFile.hasNext()) 
    { 
     data[line] = inFile.nextLine(); 
     System.out.println(data[line]); 
     line++; 
    } 
} 

public void writeRecords() 
{ 
    for(int i = 0; i < line; i++) 
    { 
     String tokens[] = data[i].split(", "); 
     Arrays.sort(tokens); 

     for(int j = 0; j < tokens.length; j++) 
      outFile.format("%s\r\n", tokens[j]); 
    } 
} 

public void closeFiles() 
{ 
    if(inFile != null) 
     inFile.close(); 

    if(outFile != null) 
     outFile.close(); 
} 
} 

你必須原諒我的括號中,那裏的netbeans格式正確,但我必須將底部的代碼保留在代碼塊中

+0

這聽起來像是功課,所以我添加了標籤。 – 2012-04-13 17:45:38

+0

您應該根據您目前在解決方案中遇到的特定問題提出具體問題。你已經寫了一些代碼,但是你沒有給出它如何不工作的跡象。我懷疑你的代碼沒有工作,但你並沒有真正問過任何問題。 – digitaljoel 2012-04-13 17:49:29

回答

1

因爲我認爲這是作業,所以我會避免給你一個解決方案,但給一些提示做什麼。

當您讀取一條線時,它包含城市,省。所以你需要做的第一件事是把字符串分成兩部分。第二部分是省,第一部分是城市。您需要爲每個省製作一個集合,並將城市存儲在正確的省份集合中。

一旦你有,你排序找到的省份的名稱,並遍歷它們。對省份的城市進行排序,然後輸出省份名稱和城市名稱。

有用的類可能是HashMap,TreeMap,List,Collections(有排序方法)。

希望能夠幫助您進一步獲得更多信息,否則請嘗試在您遇到困難的地方更具體。

+0

Map > result; //仔細選擇地圖和列表類型在這裏將使生活成爲一個蛋糕散步。 result.put(province,cityNames.add(newName)); 正則表達式組匹配器將使解析變得微不足道。頂部要實現的代碼行數:15 – 2013-11-14 19:09:15

相關問題