2011-04-06 10 views
1

私は最近のJavaインタビューの質問に出席し、私は答えのJava:Javaのインタビューの質問で明確化

1を知らないこれについては、以下のクエリを持っていた>私はクラス以下

class CricketTeam{    
    String name; //this is the complete name(inclusive of first and last name)   
}    

クリケット選手の名前を持っています以下のように:

1> Sachin Tendulkar
2> Gautam Gambhir
3> Ricky Ponting
私は彼らの提供last name only .Suugestions /コードによって命名上記のクリケット選手をソートしたい 4> Shahid Afridi
5> Kevin Pieterson
6> MS Dhoni

いただければ幸いです。

2>何をjava.whatに iteratorに対するenhanced for loopを使用することの利点は、Javaで拡張forループを使用する利点されているとiteratorは仕事をすることができるときなぜそれが最初の場所でのJavaで導入されましたか。?

+0

クリケット選手はリストまたは配列ですか? – pajton

+0

あなたの前提 – Deepak

答えて

10
  1. プレイヤー名のうち、最後の名前を解析し、これらを比較しComparatorを実装し、そのコンパレータを使用してクリケット選手のコレクションを並べ替えます。例えば複数の埋め込みで特定の微妙なバグを回避

    class CricketTeamComparator implements Comparator<CricketTeam> { 
        @Override 
        public int compare(CricketTeam o1, CricketTeam o2) { 
         String lastName1 = o1.name.split(" ")[1]; 
         String lastName2 = o2.name.split(" ")[1]; 
         return lastName1.compareTo(lastName2); 
        } 
    } 
    
    ... 
    
    List<CricketTeam> team = new ArrayList<CricketTeam>(); 
    ... 
    Collections.sort(team, new CricketTeamComparator()); 
    
  2. それはクリーンで、より簡潔かつ安全な(:(エラー処理なしで、すべてのプレイヤーが正確に一つの最初の名前なしミドルネームを持っていると仮定)
    単純な例反復子が誤って頻繁にインクリメントされる場合は、next()を何回も呼び出すことによって)
    コードサンプル

    // Can you spot the bug? 
    enum Suit { CLUB, DIAMOND, HEART, SPADE } 
    enum Rank { ACE, DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, 
    NINE, TEN, JACK, QUEEN, KING } 
    ... 
    Collection<Suit> suits = Arrays.asList(Suit.values()); 
    Collection<Rank> ranks = Arrays.asList(Rank.values()); 
    List<Card> deck = new ArrayList<Card>(); 
    for (Iterator<Suit> i = suits.iterator(); i.hasNext();) 
        for (Iterator<Rank> j = ranks.iterator(); j.hasNext();) 
        deck.add(new Card(i.next(), j.next())); 
    
  3. 質問1については
+1

@Deepak、私の更新を見てください。 –

+2

Torok:String.split()は実際に正規表現文字列を処理するので、分割ステップを実装するより良い方法は 'split(" ")'の代わりに 'split(" \\ s + ")'を使うことです。 '+' quatifierは、最初の文字と最後の文字の間に余分な空白を入れてデータを入力すると、分割された文字列配列中で '[" First "、" Last "]'を取得しないようにします。あなたのコンパレータ。 – Legs

+0

誰かがミドルネームを挿入することを決めた場合、 'splitted = split(" ")、' lastName = splitted [splitted.length - 1] '... – Theodor

1

は、あなたが_(スペースに基づいてname文字列を分割することができます(Effective Java 2nd Editionから、項目46:がfor-eachループのための伝統的にループ優先します) )デリミタを使用して配列要素をname_arr[1]に基づいて並べ替えますか?レポートのための配列要素を「再編成」します。

ここでは、単純な配列を使用したコード例を示します。要件は姓に基づいてソートすることなので、これはスペース区切り文字に基づいて文字列を分割し、結果の名前を反転し、配列をソートしてから、「再反転」することで改革します(まだ混乱していません)。

読みやすさは、私の個人的な好みです質問2については
public static String[] FlipAndSort (String[] name) { 

     for (int i=0;i<name.length;i++) { 
      String [] flip = name[i].split(" "); 
      name[i]=flip[1]+" "+flip[0]; 
     } 
     Arrays.sort(name); 
     for (int i=0;i<name.length;i++) { 
      String [] flip = name[i].split(" "); 
      name[i]=flip[1]+" "+flip[0]; 
     } 
     return name; 
    } 

、...

+0

第1質問の作業例を教えてください。 – Deepak

+0

編集をチェックしてください... – rs79

+0

ありがとうrs79 !!!! – Deepak

1

1.Checkこのサンプルコード:

// assuming this is the list with cricket players 
List<CricketTeam> team; 

Collections.sort(team, new Comparator<CricketTeam>) { 
    int compare(CricketTeam o1, CricketTeam o2) { 
     return o1.name.split(" ")[1].compareTo(o2.name.split(" ")[1]) 
    } 
} 

2.Itは使いやすく、読みやすく、不必要な詳細を隠します。

+0

私は第1の質問のための実例を与えることができます – Deepak

+0

私はちょうどでした:-)。 'team'リストを作成し、いくつかのサンプル値で満たす必要があります。 – pajton

関連する問題