-1

Java S2SE を使用して簡単なプロトタイプ プロジェクトを作成しています。目標は、テキスト ファイルを作成し、それを 1 行ずつ読み取り、リンクされたリストにデータを入力してから、ユーザーにファースト ネームとセカンド ネームの入力を求めることです。

テキストファイルの形式は次のとおりです。

firstnamesecondname モバイル ホーム mobile2 オフィス

contact1contact2 モバイルホーム mobile2s オフィス

テキスト ファイル内のファースト ネームとセカンド ネームを連結します。

次に、ユーザーに姓と名を入力するように求めます。これら 2 つの文字列の連結を使用して、データが入力されたリンク リストを検索します。これらのファースト ネームとセカンド ネームを持つ文字列を含むノードが発生するたびに、そのノードを分割し、そのノードの結果を表示します。

私のコードは次のとおりです。

try {
    String fullname;
    String mobile;
    String home;
    String mobile2;
    String office;

    Node current=first;

    while(current.data == null ? key !=null : !current.data.equals(key)) {
        String splitter[]=current.next.data.split(" ");

        //fullname=splitter[9];
        mobile=splitter[1];
        home=splitter[2];
        mobile2=splitter[3];
        office=splitter[4];

        if(current.next.data.split(" ")==null?key==null:){

            mobilefield.setText(mobile);
            homefield.setText(home);
            mobilefield2.setText(mobile2);
            officefield.setText(office);
        } else {
            throw new FileNotFoundException("SORRY RECORD NOT LISTED IN DATABASE");
        }
            break;
    }
} catch(Exception e) {
        JOptionPane.showMessageDialog(this,e.getMessage()
        +"\nPLEASE TRY AGAIN !","Search Error", JOptionPane.ERROR_MESSAGE);
}

問題は、すべてうまくいっているのに、リストの最初のノードから n-1 番目のノードまで検索がうまくいかず、この検索で​​最後のノードに到達していないことです。

4

2 に答える 2

0

あなたの質問から集めたものから、私はあなたのコードを修正しました。これはうまくいくはずです:

try {
String fullname;
String mobile;
String home;
String mobile2;
String office;

Node current;

    //This loop will start from the first `Node`, check for `null`, then check if it is equal to the `key`. If not, then it will advance to `next`
for(current=first; current!=null && !current.data.equals(key); current = current.next);

    //the loop will terminate if current is null or is equal to key. If it is equal to key, we should display data.
if(current.data.equals(key))
{

    String splitter[]= current.data.split(" ");

    fullname=splitter[0];
    mobile=splitter[1];
    home=splitter[2];
    mobile2=splitter[3];
    office=splitter[4]; 

    mobilefield.setText(mobile);
    homefield.setText(home);
    mobilefield2.setText(mobile2);
    officefield.setText(office);
}
else
    throw new FileNotFoundException("SORRY RECORD NOT LISTED IN DATABASE");

} catch(Exception e) {
    JOptionPane.showMessageDialog(this,e.getMessage()
    +"\nPLEASE TRY AGAIN !","Search Error", JOptionPane.ERROR_MESSAGE);

編集:コメントを追加しました。

于 2012-12-26T19:29:15.953 に答える