2016-12-14 2 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

@ScaryWombat спасибо –

+1

И для записи: * best * на самом деле не очень хорошие критерии. Лучше всего? Читаемость? Представление? – GhostCat

ответ

2

Гораздо проще.

Там есть функция, которая уже в Java:

Collections.frequency(list,num); 

Так что в вашем случае вы должны сделать петлю:

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

Ваш код неправильно обрабатывает переменную count, так как вы не сбрасываете ее для каждого списка.

Оптимизация над кодом:

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); 
     } 
    } 
} 
Смежные вопросы