0

私は州の選別機を作成しています。要件は、メインクラスをそのままにして、Mungeというプライベートクラスを作成する必要があることです。これに何時間も参加し、コードを何百回も変更しました。このようなテキストファイル

ハミルトン、オンタリオ
トロント、オンタリオ
エドモントン、アルバータ
レッドディア、アルバータ
セントジョンズ、ニューファンドランド

このように出力する必要があります

アルバータ; エドモントン、レッドディア
オンタリオ; ハミルトン、トロント
ニューファンドランド; セントジョンズ

私のメインクラスは変更できず、次のようになります

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で正しくフォーマットされていますが、コードブロックに保持するために下の角かっこを移動する必要がありました。

4

1 に答える 1

1

これは宿題だと思うので、私はあなたに解決策を与えることを避けますが、何をすべきかについてのいくつかのヒントを与えます。

行を読んだとき、それは市、州で構成されています。したがって、最初に行う必要があるのは、文字列を2つの部分に分割することです。2番目の部分は州で、最初の部分は市です。各州のコレクションを作成し、その都市を正しい州のコレクションに保存する必要があります。

それができたら、見つかった州の名前を並べ替えて、それらを繰り返し処理します。州の都市を並べ替えてから、州名と各都市名を出力します。

便利なクラスは、HashMap、TreeMap、List、Collections(sortメソッドがあります)です。

それがあなたをさらに前進させるのに役立つことを願っています、さもなければあなたが立ち往生している場所をより具体的にしようとします。

于 2012-04-13T17:54:32.367 に答える