2016-03-29 16 views
-2

誰でも助けてくれますか? 私はコンタクトブックを管理する大規模なプロジェクトの一部としてメソッドを持っています。アドレス帳の連絡先をアルファベット順に並べ替える方法は?

私はStringを使用する必要がありますので、配列はありません。 できるだけcompareToを使用したいと思います。

説明である:所定のノートで:

この方法接触線

6|cori|ben|[email protected]|4502334565接触線のexemple)を挿入します。コンタクトラインは、姓でアルファベット順に並べる必要があります。

このメソッドは、デリゲートを検証しません。

パラメータ帳我々は(パラメータから)接触ラインを紹介したい本

我々は非nullで本を仮定しますが、最初から空です。

非空であれば、このようにして形成されています

/* 
     3|Crevier|Simon|[email protected]|5145678988 (contact line) 
     1|Douglas|Sylvie|nothing|4507461234 
     2|Dumoulin|Fred|[email protected]|nothing 
     4|Girard|Myriam|nothing|nothing 

*/ 

パラメータは、1行の魔女にフォーマットするために連絡先をcontactLineブック

に追加する必要があります私たちは、接触線であることを前提と非ヌル、空ではなく、正式な形式(例のように)

挿入後の新しい本の新しい弦。新しく返された本は正式に整理される必要があります。

このメソッドは、同じクラスのfindLastNameContact()メソッドを使用する必要があります(メソッドは、連絡線からの姓を取得します。例:3|Crevier|Simon|[email protected]|5145678988)=>クレヴァーは姓です。

このケースを無視する必要があります。

/* 
---------------------------------------------- 

METHOD IF CONTACT IS INSERTED IN THE BOOK 
---------------------------------------------- 
Insert 1|crook|hubert|[email protected]|4502765009 in the empty book... ERROR 

Expected: 
1|crook|hubert|[email protected]|4502765009 

Have found: 



Instert 2|aubre|Camille|aucun|5149098778... ERROR 

Expected: 

2|Aubre|Camille|aucun|5149098778 

1|crook|hubert|[email protected]|4502765009 

Have found: 

1|crook|hubert|[email protected]|45027650092|aubre|Camille|aucun|5149098778 

1|crook|hubert|[email protected]|4502765009 

Instert 3|charland|Marc|[email protected]|nothing... ERROR - 
NoSuchElementException unexpected. 

Instert 4|mason|Isabelle|aucun|aucun... ERROR - NoSuchElementException unexpected. 

Insert 5|fortin|Bruno|[email protected]|5142768898... ERROR - NoSuchElementException unexpected. 

Insert 6|ZHE|Xang|[email protected]|4598765423... ERROR - NoSuchElementException unexpected. 

Insert 7|morier|Dominic|[email protected]|4598765423... ERROR 

Expected: 

    2|Aubre|Camille|aucun|5149098778 

    3|CHaRland|Marc|[email protected]|aucun 

    1|crook|hubert|[email protected]|4502765009 

    5|Fortin|Bruno|[email protected]|5142768898 

    4|Mason|Isabelle|aucun|aucun 

    7|Morier|Dominic|[email protected]|4598765423 

    6|ZHE|Xang|[email protected]|4598765423 

    Have found : 

    2|Aubre|Camille|nothing|5149098778 

    3|CHaRland|Marc|[email protected]|nothing 

    1|crook|hubert|[email protected]|4502765009 

    5|Fortin|Bruno|[email protected]|5142768898 

    4|Mason|Isabelle|nothing|nothing 
    6|ZHE|Xang|[email protected]|45987654237|morier|Dominic|[email protected]|4598765423 
    nothing 

    6|ZHE|Xang|[email protected]|4598765423 


Insertion 8|alban|Roger|[email protected]|5143677788... ERROR - NoSuchElementException unexpected. 

*/ 
public static String InsertThisContactInTheBook 
    (String book, String contactLine) { 


     String lastNameContact; 
     String id, lastName, givenName, email, phone; 
     String newBook = ""; 

     lastNameContact= findLastNameContact(contactLine);//contact line is from outside, also the findLastNameContact, witch is extraxting la last name from contact line 

    //6|cori|ben|[email protected]|4502334565| (example of contact line) 

     StringTokenizer tokens = new StringTokenizer(book, "|"); 

     // newBook = book+ contactLine; 

     while (tokens.hasMoreTokens()){ 
      id = tokens.nextToken(); 
      lastName = tokens.nextToken(); 
      givenName = tokens.nextToken(); 
      email= tokens.nextToken(); 
      phone= tokens.nextToken(); 

      if (lastName.compareToIgnoreCase(lastNameContact) > 0) { 
       newBook = book + contactLine + "\n" + id + "|" + lastName + "|" + givenName + "|" + email+ "|" + phone+ "\n"; 
      } 
     } 
     return newBook; 
    } 
+0

申し訳ありませんが、フランス語で尋ねるのが簡単でした。質問は英語でしか扱われていません。ノートブックの連絡先をアルファベット順にソートする必要があります。 –

答えて

0

この宿題はありますか?そうであれば、私たちに知らせてください。各contactLine内のデータフィールドを区切る|区切り文字、そしてあなたは、個々のcontactLine Sを分離するために使用している\n改行区切り文字:

まず、あなたがbook内部の区切り文字の2種類を使用しているように私には思えますbook以内。それは次のようにフォーマットされたかのようにbookを解析する、|に区切りされた、あなたのStringTokenizerをこのため

if (lastName.compareToIgnoreCase(lastNameContact) > 0) { 
    newBook = book + contactLine + "\n" + id + "|" + lastName + "|" + givenName + "|" + email+ "|" + phone+ "\n"; 
} 

6|ZHE|Xang|[email protected]|45987654237|morier|Dominic|[email protected]|459876542|nothing 

とき

あなたのコードのこのセクションを参照してください。実際には2つの連絡先は:

6|ZHE|Xang|[email protected]|4598765423 
7|morier|Dominic|[email protected]|459876542|nothing 

contactLinesの間に区切り記号|がないことに注意してください。したがって、StringTokenizerの代わりに5 + 6 = 11のトークンを認識すると、を2トークンの代わりに1トークンとして扱い、bookを10トークンにトークン化します。45987654237です。

第2のの場合、上に貼り付けた出力のcontactLineエントリに別の問題があります。直前に引用した例では、 "ZHE Xang"と "morier Dominic"という2つの行には異なるトークンが含まれています。このことから、上記のあなたのwhileループが確実に動作しませんのでmorierドミニクさんは、6が含まれていながらZHEランサンのcontactLineは5つのトークンが含まれています - 5つのトークンを持っているすべてのcontactLinesを期待しているが、いくつかは明らかに私はこの部分を参照しています6.

を持っていますあなたのコードの:それは信頼できないあなたのwhileループ内のコードブロックを作る:

while (tokens.hasMoreTokens()){ 
    id = tokens.nextToken(); 
    lastName = tokens.nextToken(); 
    givenName = tokens.nextToken(); 
    email= tokens.nextToken(); 
    phone= tokens.nextToken(); 

私は、これらの問題の両方の最終結果は、実際には同じ問題だと思います。 2つのデリミタを使用しているにも関わらず、1つのトークンのみでトークンを使用しているかどうか、あるいはcontactLinesに6つのトークンがあるかどうかにかかわらず、アルゴリズムは5つのトークンの何倍かを常に仮定しています。 5,6、および9は5のクリーンな倍数ではありません。

私はあなたにも2つの質問があります(これは元の投稿へのコメントの方が良いかもしれません)。思考のためだけの食糧。

  1. Stringは何も使用できません。
  2. なぜクラスメソッドではなく静的メソッド(例:book.insertContact(contact);)を使用していますか?
+0

はい、あなたは正しいですが、宿題のほんの一部ですが、私はそれをどうするかを理解できません。私は問題を見るが、私はそれを修正することができます。私はそれらを学んだので、私は文字列を使用したい。私は大規模なプロジェクトに使う小さなメソッドを作る。この方法もその一つです。このメソッドに気付いたので、別のメソッドを呼び出します:findLastNameContact(contactLine) - >連絡先の行から最後の名前を抽出します。あなたの意見ではThx。 –

+0

[Vector](https://docs.oracle.com/javase/7/docs/api/java/)など、タスクに適した別のデータ構造を使用すると、はるかに簡単になります。 util/Vector.html)または[ArrayList](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html)を参照してください。これは私が指摘した最初の問題( '\ n'を使って異なる' contactLines'を区切る)を回避し、おそらくもっと速くなるでしょう。別の質問がありましたか?私の答えはあなたを助けましたか? – Zkoh

+0

残念ながら、このプロジェクトでは配列やベクトルを使用できません。私は今まで持っていた知識で問題を解決しなければなりません。あなたはどこに問題があるかを私に教えてくれました。今は別の質問がありません。あなたのお手伝いをしていただきありがとうございます。私はそれを感謝します。 –

関連する問題