0

パラメーター firstname、lastname、および year を持つ Person クラスを作成しました。テキスト ファイルから入力を読み取り、人物の配列を作成する方法を理解する必要があります。これは、Web からプールしたさまざまなソースに基づいて、私が試していることです。

String name = "People.txt";
        Person[] people = new ArrayList<Person>();
        BufferedReader br = new BufferedReader(new FileReader(name));
        String line = br.readLine();
        while(line != null)
        {
            people.add(line);
            line = br.readLine();
        }

しかしもちろん、これはうまくいきません。私はそれが正しいとは思えないので、何かアドバイスがあれば教えてください。

また、私の Person クラスのコンストラクターは次のとおりです。

public Person(String firstName, String lastName, int age){
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }



The error reads,

`SortingImplementation.java:15: incompatible types
found   : java.util.ArrayList<Person>
required: Person[]
                Person[] people = new ArrayList<Person>();
                                  ^
SortingImplementation.java:20: cannot find symbol
symbol  : method add(java.lang.String)
location: class Person[]
                        people.add(line);
                              ^
Note: SortingMethod.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors
`

テキストファイルは

Larry Kim 45
Bob Stuart 51
Nancy Davis 38
John Doe   49
Henry Miles 23
Albert Lee 36
Mary Wing  43
Tony Rich  55
Ally Sneetch  19
Carrie Chrome 77
David Abkenzy 41
Young Old    18
Snow White  70
George Herald 60
Mike Bush 22
Peter Paul 33
Peter Pan 44
Mary Paul 25
Ray Romano 55

まあ、甘い。あなた達は素晴らしいです、多分私は今夜眠れるでしょう. これを成し遂げようとして文字通り2日間連続で起きていて、幻覚を起こし始めました。私が抱えている最後の問題は単純なものだと確信していますが、このエラーが発生しています。

SortingImplementation.java:15: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
                BufferedReader br = new BufferedReader(new FileReader("People.txt"));
                                                       ^
SortingImplementation.java:16: unreported exception java.io.IOException; must be caught or declared to be thrown
                String line = br.readLine();

インスタンス化の方法に関係しているのか、適切なヘッダーファイルがインポートされていないのかもしれません。輸入したものはこちら。

import javax.swing.JOptionPane;
import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.io.*;
import java.nio.*;

不足している可能性のあるものはありますか?

4

2 に答える 2

1

2 つのオプションがあります。

  1. クラスを変更せずにPerson、行を読み取った後、データを 、 、および に解析し、firstNameこれらlastNameage引数をコンストラクターに送信できます。
  2. Person単一Stringの解析されていない引数を期待し、コンストラクター内ですべての解析を行い、そこから変数を初期化して割り当てるコンストラクターを追加できます。

いずれかのオプションを実行する方法の詳細については、テキスト ファイルが正確にどのように見えるかを示す必要があります。


Stringしかし、現在の問題は、オブジェクトをArrayListofオブジェクトに追加しようとしていることですPerson

これを行う必要があります:

people.add(new Person(/*constructor arguments*/));

ファイル形式を含めるように更新したので、次のようにしてみてください。

while(line != null) {
    String[] lineParts = line.split("\\s+");
    people.add(new Person(lineParts[0],lineParts[1],parseInt(lineParts[2]));
    line = br.readLine();
}

追加のコンストラクターを介して行うことPersonは、それほど違いはありません。

Personクラスに、次のコンストラクターを追加します。

public Person(String s) {
    String[] parts = s.split("\\s+");
    this(parts[0], parts[1], parseInt(parts[2]));
}

次に、メインで、whileループを次のようにします。

while(line != null) {
    people.add(new Person(line));
    line = br.readLine();
}
于 2013-11-15T02:24:06.520 に答える
1

行を追加するだけStringで、魔法のようにPerson. 各行を別々Stringの に分割し、それらから人を作成する必要がありますString

    Person[] people = new ArrayList<Person>();  
    BufferedReader br = new BufferedReader(new FileReader(name));
    String line = br.readLine();
    while(line != null)
    {
        people.add(line);
        line = br.readLine();
    }

このようなことをする必要があります。配列からへの変更に注意してくださいArrayList<Person>

    ArrayList<Person> people = new ArrayList<Person>();  // Notice change here
    BufferedReader br = new BufferedReader(new FileReader(name));
    String line;
    while((line = br.nextLine()) != null)
    {
        String[] tokens = line.split("\\s+");
        String firstName = tokens[0];
        String lastName = tokens[1];
        int age = Integer.parseInt(tokens[2]);  // parse String to int

        people.add(new Person(firstName, lastName, age));
    }

これは、入力テキストが次のようにフォーマットされていることを前提としています

名 姓 年齢

try/catchまた、すべてをブロックでラップするか、メソッドを持っていることを確認してくださいthrows IOException

于 2013-11-15T02:24:22.613 に答える