2016-12-14 17 views
1

nリストに共通数の出現を見つける解を書いた。これが最善の解決策であれば私は心配していますか?それを行う最善の方法を提案してください。リストの最良解で与えられた数のカウントオカレンスを見つける

import java.util.Arrays; 
import java.util.List; 

public class CommonNumberFinder 
{ 

    final static List<Number> list1 = Arrays.asList(new Number[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); 
    final static List<Number> list2 = Arrays 
      .asList(new Number[] { 3, 5, 1, 6, 2, 6, 3, 3, 6, 1, 5, 7, 2, 6, 2, 5, 2, 6, 8, 2 }); 

    public static void main(String[] args) 
    { 
     findCountOfNumber(Arrays.asList(new List[] { list1, list2 }), 6); 
    } 

    private static void findCountOfNumber(final List<List<Number>> lists, final Number num) 
    { 
     int count = 0; 
     for (List<Number> list : lists) 
     { 
      if (!list.contains(num)) 
      { 
       System.err.printf("Number %d is not common", num); 
      } 
     } 
     for (List<Number> list : lists) 
     { 
      for (Number number : list) 
      { 
       if (number == num) 
        count++; 
      } 
      System.out.println("List have-" + count); 
      count = 0; 
     } 

    } 
} 
+5

は、HTTPを試して、あなたが適切に特定のリストとの数を指定することができます// codereview.stackexchange.com/ –

+0

@ SkaryWombatありがとう –

+1

そして記録のために:*ベスト*は本当に良い基準ではありません。何がベスト?読みやすさ?パフォーマンス? – GhostCat

答えて

2

非常に簡単です。

そのための機能がJavaですでにあります:

for(List<Number> nestedList : lists){ 
    count+=Collections.frequency(nestedList,num); 
} 
if(count == 0) {     
    System.err.print(num+ " is not common"); 
} else{ 
    System.out.println("List have-" + count); 
} 

所望の出力に

+1

あなたの解決策は、数字がよくあるのか、それとも最良でないのかをチェックしません。 –

+0

@AnkitKatiyar権利、要件に合わせて編集 – ItamarG3

+0

@AnkitKatiyarあなたは最高のものではないことを何ですか?より良い提案がありますか? – ItamarG3

0

を与えるだろう:

Collections.frequency(list,num); 

は、だからあなたの場合には、あなたはループを行う必要があるだろうcount変数は、リストごとにリセットされていないため、コードが誤って処理しています。あなたのコードの上に

最適化:あなたはItamarで述べた機能を使用することはできません場合は

for (List<Number> list : lists) 
{ 
    count = Collections.frequency(list ,num); 

    if(0 == count) {     
     System.err.printf("Number %d is not common", num); 
    }else{ 
     System.out.println("List have-" + count); 
    } 
} 
0

(これは代入であれば、それはおそらく場合のように)、私は単純化されたバージョンを追加しています以下:

private static void findCountOfNumber(final List<List<Number>> lists, final Number num) 
{ 
    for (List<Number> list : lists) 
    { 
     int count = 0; 
     for (Number number : list) 
     { 
      if (number == num) 
       count++; 
     } 
     if (count == 0) { 
      System.err.printf("Number %d is not common", num); 
     } else { 
      System.out.println("List have-" + count); 
     } 
    } 

} 
1

private static void findCountOfNumber(final List<List<Number>> lists, final Number num) { 
    int count = 0, listNumber = 0; 
    for (List<Number> list : lists) { 
     listNumber++; 
     count = Collections.frequency(list, num); 
     if (count == 0) { 
      System.err.printf("Number %d is not common in list %d", num, listNumber); 
     } else { 
      System.out.println("List " + listNumber + " has count : " + count); 
     } 
    } 
} 
関連する問題