2016-08-26 2 views
-1

私はJavaで、ビデオゲームだけで "ライブラリ"のように動作するプログラムを作っています。プログラムでは、ゲームを追加、削除、編集することができます。あなたはまた、 "図書館"内のすべてのゲームを一覧表示することができます。Javaに触発されていますが、なぜこのコードは機能しませんか? i ++は「デッドコード」であり、関数は必要な型の変数を返しません。たとえそれがあっても

ゲームを削除したり編集したりできるように、私はそれを与えるクエリ文字列と一致するリスト内のすべての要素のリストを返す関数を実装することにしました。返されたすべての結果の番号付きリスト間。私は空のGameStorageのArrayListを初期化し、必要なすべての要素を格納し、それを返すためにこれを使用

public static ArrayList<GameStorage> findElement(ArrayList<GameStorage> gameList, String query) { 
    ArrayList<GameStorage> temp = new ArrayList<GameStorage>(); 
    for(int i = 0; i < gameList.size(); i++) { 
     if(gameList.get(i).getName().contains(query)) { 
      temp.add(gameList.get(i)); 
     } 
    return temp; 
    } 
} 

は、これは私のコードです。しかし、これはまったく機能しませんし、Eclipseはi++の部分が「デッドコード」と思われることを示しています(これはコードに決して到達していないことを意味します)、関数はまた、希望の型の結果を返さないと言いますArrayList<GameStorage>私がしていても。私は何が間違っていたのか分かりません。

誰かが私を啓発するかもしれませんか?

+1

以下ラムダの例でコードを短くすることができますか?デッドコードがある理由は、forループのインクリメントステージに到達しないためです。 – Li357

+2

'for'ループから' return'を取り出します。 – Kayaman

答えて

6

returnは、の後、最後のステートメントではなく、にする必要があります。最後の文であるのでi++には決して到達しません。また、あなたはfilterCollectors

public static List<GameStorage> findElement(List<GameStorage> gameList, String query) { 
    return gameList.stream().filter(x -> x.getName().contains(query)) 
      .collect(Collectors.toList()); 
} 
で全体の方法にを実装するかもしれません8+

for (GameStorage gs : gameList) { 
    if (gs.getName().contains(query)) { 
     temp.add(gs); 
    } 
} 
return temp; 

好きで、Javaでfor-each loopを使用することができ

for(int i = 0; i < gameList.size(); i++) { 
    if(gameList.get(i).getName().contains(query)) { 
     temp.add(gameList.get(i)); 
    } 
} 
return temp; 

ようにそれを変更します

そして私はListインターフェイスにプログラムしたいと思っています。

+0

ああ、私は今、とても愚かな気がする。私を助けてくれてありがとう! 私はJavaがForEachループを持っていたのか分からなかった。 :D – gloriousCatnip

3

あなたは、ループの最初の反復に戻るなぜあなたは、java 8+

gameList.forEach((k)->{ 
    if(k.getName().contains(query)){ 
     temp.add(k) 
    } 
} 
+4

式をlambdaに変更するだけで、 'forEach'メソッドでラップすることはそれほど短くはありませんが、ローカル変数にはそれ以上割り当てることはできません。ええ、私は知っている、Java 8ラムダは素晴らしいですが、それらを過度に使用しないでください。 – kamil09875

+1

もしすべてのlambdaに行くなら、ストリームを使うかもしれない: 'return gameList.filter(k - > k.getName()。contains(query))。collect(toList());' – shmosel

関連する問題