2016-06-24 1 views
1

펜, 상자 및 자동차의 3 가지 항목이 있다고 상상해보십시오. 최대 9 개의 펜, 최대 5 개의 상자 및 최대 2 개의 자동차를 가질 수 있습니다. 당신이 가질 수있는 모든 아이템의 조합의 합계를 어떻게 계산합니까? 여기 Integer가 Java에서 최대 값을 갖는 String, Integer 쌍의 모든 조합을 사용하여 효율적으로 계산하는 방법은 무엇입니까?

내가 현재 가지고있는 코드입니다 :이 작품과 조합의 수를 더한 총 가격과 출력을 제공

 int maxPens = 9; 
     int maxBoxes = 5; 
     int maxCars = 2; 

     Double penPrice = 1.5; 
     Double boxPrice = 50.0; 
     Double carPrice = 150.0; 

     int penCount = 0; 
     int boxCount = 0; 
     int carCount = 0; 
     int totalCount = 1; 

     while (penCount <= maxPens) { 
      boxCount = 0; 
      while (boxCount <= maxBoxes) { 
       carCount = 0; 
       while (carCount <= maxCars) { 
        Double totalPrice = (penCount * penPrice) + (boxCount * boxPrice) + (carCount * carPrice); 
        System.out.println(totalCount + " = " + totalPrice); 

        totalCount++; 

        carCount++; 
       } 
       boxCount++; 
      } 
      penCount++; 
     } 

하지만, 정말 지저분한 느낌 그리고 난 다음 다른 항목을 추가하려면 I 메소드에 반복을 추가해야합니다. 예를 들어 다음과 같은지도를 사용하여지도를 사용할 수 있습니까?

Map<String, Integer> maxCountMap = new HashMap<String, Integer>(); 
Map<String, Double> priceMap = new HashMap<String, Integer>(); 

그리고이를 통해 반복 할 수 있습니까?

+0

없는 아름다운 솔루션하지만 난 http://ideone.com/42wTJJ 같은 당신은 그것이 잘못되고 있음을 맞아 – zapl

+0

일반적인 충분한 해결책이 될 것이라고 생각 멋지지 않아! 그러나 확실히 상자를 체크하는 것으로 보인다. – ollym

답변

1

당신은지도를 통해 반복 할 수 있지만, 제 생각에 가장 깨끗한 해결책은 새로운 클래스 항목 만드는 것입니다 :이 클래스는 getter 및 setter를 포함해야

public class Item { 
    String name; 
    int max; 
    double price; 

    Item(String name, int max, double price) { 
     this.name = name; 
     this.max = max 
     this.price = price;  
    } 

} 

합니다.

대신 동안의 루프 사용

Item pen = new Item(Pen, 5, 1.5) 
Item box = new Item(Box, 5, 50.0) 
Item car = new Item(Car, 2, 150.0) 

for (int i; i<=pen.getMax; i++){ 
    for (int j; j<=box.getMax; j++){ 
    for (int k; k<=car.getMax; k++){ 
     Double totalPrice = (i * pen.getPrice()) + (j * box.getPrice()) + (k * car.getPrice()); 
     int total = i+j+k; 
     System.out.println(total + " = " + totalPrice); 
    } 
    } 
} 
+0

명확히 제 것보다 깨끗합니다. 감사합니다! 코드를 변경하지 않고도 다른 항목을 추가하는 문제는 해결되지 않습니다. 예 : 'cup'항목을 추가하면 기존 루프를 감싸기 위해 다른 루프를 추가해야합니다. – ollym

관련 문제