2011-05-06 3 views
0

조합 적 퍼즐 : 나는 순간부터 Map<String, Collection<String>>에서이나는 다음과 같은 문제를 해결하는 가장 좋은 방법이 무엇인지 궁금하네요

. 식사지도가 그 식사에서 제공 할 수있는 음료 컬렉션을 가지고 있다고 가정 해 봅시다. 예 :

아침 식사 - 오렌지 주스 아침 식사 - 커피

점심 - 오렌지 주스 점심 - 소다 점심 - 맥주

저녁 식사 - 소다 저녁 식사 - 맥주 저녁 식사 - 와인

그래서 내 컬렉션 실제로는 Map<Meal, Collection<Beverage>>

내가 수행해야 할 작업은을 만드는 것입니다.식사의 모든 음료 조합. 나는이 경우에 18 조합을 가질 것이다. 예 :

[

[ 아침 식사 -> 오렌지 주스, 점심 -> 오렌지 주스, 저녁 식사 -> 소다 ]

[ 아침 식사 -> 오렌지 주스, 점심 -> 오렌지 주스, 저녁 식사 -> 맥주 ]

[ 아침 식사 -> 오렌지 주스, 점심 -> 오렌지 주스, 저녁 식사 -> 와인 ]

[ 아침 식사 -> 오렌지 주스, 점심 -> 소다, 저녁 식사 -> 소다, ]

등 ... ]

난 다른 사람들이 최종 컬렉션을 만드는 방법에 관심이 있습니다.

또한 자바를 사용하고있어 멋진 기능성 항목은 사용할 수 없습니다.

감사

식사 유형

편집은 동적입니다. 즉, 저녁 식사를 목록에서 삭제하거나 브런치를 추가 할 수 있습니다.

답변

1

맞다면 마법은 없습니다. 중첩 된 루프에서 3 개 이상의 컬렉션을 반복하면됩니다.

for (String breakfastBev : breakfast) { 
    for (String lunchBev : lunch) { 
    for (String dinnerBev : dinner) { 
     System.out.println(breakfastBev + ", " + lunchBev + ", " + dinnerBev); 
    } 
    } 
} 

은 지금 당신이 당신의 Map 출력 List 함께 할 방법을 알아낼 수 있습니다 확신합니다.:-)

편집는 : 변경된 요구 사항은 그것을 할 수있는 한 가지 방법은 재귀입니다 :

main() { 
    List<Map<String, String>> output = new ArrayList<Map<String, String>>(); 
    recordBeverages(new HashMap(), beveragesByMeal, output); 
} 

void recordBeverages(Map visited, Map meals, List<Map> output) { 
    if(meals.isEmpty()) { 
     output.add(visited); 
    } 
    String mealType = meals.keySet().iterator().next(); 
    Map remainingMeals = new HashMap(visited); 
    remainingMeals.keySet().remove(mealType); 
    for(Beverage bev : meals.get(mealType)) { 
     Map newVisited = new HashMap(visited); 
     newVisited.put(mealType, bev);  

     recordBeverages(newVisited, remainingMeals, output); 
    } 
} 

테스트하지,하지만 당신은 THS 아이디어를 얻을.

+0

아, 내가 얼마나 많은 식사 종류가 있는지 모르겠다. 예 : 브런치를 추가 할 수 있습니다. 그럼에도 불구하고, 나는 당신이 내가 이것을 생각할 때 옳다고 생각할지도 모릅니다. – pondermatic

0

식사가있을 때 카운터 수와 함께 카운터 배열을 사용하십시오. 루프에서 첫번째 식사를위한 마지막 음료에 도달 할 때까지 첫 번째 음식을 늘린 다음 다음 식사를 위해 마지막 음료수에 도달 할 때까지 첫 번째 음식을 증가시킵니다 (아래로 살짝 넘김). 마지막 식사의 마지막 음료에 다다랐을 때 당신이 끝납니다.

코드를 남겨 두겠습니다.

+0

이것은 구현 한 방법이므로 수용 가능한 방법이라는 확신을 갖는 것이 좋습니다. 감사. – pondermatic