2

これらの配列オブジェクトには、ファイルから抽出した情報が格納されています。これらを配列に変更するにはどうすればよいですか。私は 2D 配列を使用するつもりだと思います。それらを並べ替えて、それらから対応する情報を表示したいと考えています。

while(kd.hasNext()){
        String data = kd.nextLine();
        String [] values = data.split(",");

        String wScore = "N/A" , lScore = "N/A", crowd = "N/A";

        String year = values[0];
        String premiers = values[1];
        String runnersUp = values[2];
        if (values.length > 6)
        {wScore= values[6];}
        if (values.length > 7)
        {lScore= values[7];}
        if (values.length > 8)
        {crowd= values[8];}

これは、非常に大きなファイル内の 1 行の情報です。

2005,Arsenal,ManU,Arsenal,WestHam,Y,2,3,40000

 So if the user enters: 
 2005 

プログラムに次のように表示させたい:

 Year: 2005
 Premiers: Arsenal
 Runner Up: ManU
 Minor Premier: Arsenal

等..

配列の長さのために for ループを使用しようとしましたが、配列内に年数と他のすべてのオブジェクトがないため、使用できません。誰かがそれに対する解決策を持っているかどうか疑問に思っていました。

先生によると、HashMap、ArrayList、コレクション、Open CSV の使用は許可されていません。

4

4 に答える 4

1

コメントに記載されているように、テキスト ファイルに必要な数のフィールドを使用して、任意の名前の新しいクラスを作成する必要があります。その年に与えられるデータの量に関して発生する可能性のあるさまざまなケースに対して、いくつかの異なるコンストラクターを作成します。そこからは、各フィールドの get/set メソッドを作成するだけです。

基本的な枠組み:

public class YearlyInformation
{
    int years;
    string premier, runnersUp;

    public YearlyInformation(int year, string prem, string, runners)
    {
        years = year;
        premier = prem;
        runnersUp = runners;
    }

    int getYear(void)
    {
        return years;
    }

    void setYear(int year)
    {
        years = year;
    }

}

当然のことながら、使用できるさまざまなフィールドごとにさらに追加する必要がありますが、それが基本的な考え方であり、それに追加するのはコピー アンド ペーストと同じくらい簡単です。

于 2013-05-29T17:37:19.650 に答える
0

すべての行を 2D 配列に格納する場合は、次のようなものを使用できます。

public static void main(String[] args) throws Exception {

    FileInputStream inputStream = new FileInputStream("file.txt");
    InputStreamReader streamReader =new InputStreamReader(inputStream,"UTF-8");
    BufferedReader in = new BufferedReader(streamReader);

    int increment = 10;
    int size = 0; // number of lines
    String[][] all = new String[increment][];

    for(String line; (line = in.readLine()) != null;) {

        String[] data = line.split(",");

        all[size++] = data;

        if(all.length == size) {
            // Increment capacity
            String[][] tmp = new String[all.length + increment][];
            for(int i = 0; i < data.length; i++) {
                tmp[i] = all[i];
            }
            all = tmp;
        }

    }

    // Trim to size
    String[][] tmp = new String[size][];
    for(int i = 0; i < size; i++) {
        tmp[i] = all[i];
    }
    all = tmp;

並べ替え: 先生が何も言わない場合java.util.Comparator:

    Arrays.sort(all, new Comparator<String[]>() {
        @Override
        public int compare(String[] a, String[] b) {
            // By year?
            int yearA = Integer.parseInt(a[0]);
            int yearB = Integer.parseInt(b[0]);
            return yearA - yearB;
        }
    });

ソートはあまり便利ではないかもしれませんが、構造上クイック検索ができないためです。

クエリ: そして最後にユーザー入力:

    String input = null;
    Scanner sc = new Scanner(System.in);
    do {
        System.out.print("Input the year: ");
        String year = sc.nextLine();
        for(int i = 0; i < size; i++) {
            if (all[i][0].equals(year)) {
                // out data
            }
        }

    } while (input == null || input.isEmpty());


}
于 2013-05-29T18:18:28.167 に答える