1

私が作成したコードは、テキストファイルを1行ずつ読み取り、各行を配列に保存する機能を提供することを目的としています。各行を正しく読み取っているように見えますが、printProps()メソッドを使用すると、1つしか表示されません...

コードはテキストファイルの1行だけを配列に保存していますが、私のコードの何が問題になっていますか?

/*reading in each line of text from text file and passing it to the processProperty() method.*/
Public void readProperties(String filename) {
    try {
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        int i = 0;
        String line;
        line = reader.readLine();
        while (line != null && !line.equals("")) {
            i++;
            processProperty(line);
            line = reader.readLine();
        }
        System.out.println("" + i + " properties read");
    } catch (Exception e) {
        System.err.println(e.getMessage());
        e.printStackTrace();

    }
}

/*Breaks up the line of text in order to save the value to an array (at this point it only saves one line to the array). org.newProp(newProp) passes the new property to the Organize class where it saves it to an array.

public void processProperty(String line) {
         org = new Organize();
        int id = nextPropertyID;
        nextPropertyID++;

        String[] parts = line.split(":");
        int propNo = Integer.parseInt(parts[0]);            
        String postcode = parts[1];
        String type = parts[2];
        int bedrooms = Integer.parseInt(parts[3]);
        int year = Integer.parseInt(parts[4]);
        int rental = Integer.parseInt(parts[5]);
        Landlord landlord = theLandlord;
        Tenant tenant = null;
        org.propUniqueCheck(id);
        propNoCheck(propNo, postcode);
        postcodeCheck(postcode,propNo);
        typeCheck(postcode, propNo, type);
        bedroomsCheck(bedrooms, postcode, propNo);
        yearCheck(propNo, postcode, year);
        System.out.println("Creating property " + id);

        Property newProp = new Property(id, propNo, postcode, type, bedrooms, year,
                rental, landlord, tenant);
        org.newProp(newProp);
        org.printProps();
    }

/*From here down it is the code to save the value to the array*/

public Organize() {
        props = new ArrayList<Property>();
        PTs = new ArrayList<PotentialTenant>(); 
        waitingList = new LinkedList<String>();
        //myList.add(new prop(Property.toString()));

    }
    public void newProp(Property p)
    {
        props.add(p);
    }

私はこの問題についてセミナーで積極的に助けを求めてきましたが、解決策が見つからないようです。アドバイスをいただければ幸いです。

4

2 に答える 2

1

processPropertyでは、新しいOrganizeオブジェクトをインスタンス化しています。したがって、(行ごとに作成する)各プロパティは、(最初​​の要素として)異なるArrayListになります。

1つの解決策は、ループを開始する前に1つのオブジェクトをインスタンス化Organizeし、これをパラメーターとしてprocessPropertyメソッドに渡すことです。

于 2012-12-05T13:15:01.923 に答える
0

テキストファイルの1行が空の文字列である場合、whileループは中断されます。

これは、ループを実装する正しい方法です。

String line = "";
while ((line = reader.readLine()) != null) {
    // your code here
}
于 2012-12-05T13:15:03.597 に答える