2017-01-30 1 views
0

항목을 구매 한 후 동전을 반환하는 함수를 만들려고합니다. 나는 완료 아니지만, 아래의 코드가 반환되어야 분기, 10 센트, ​​센트와 동전의 수를 찾기위한 시도이다 : Java의 기금에서 현금을 반환하는 함수 만들기

public String getChange(VendingMachine vendingMachine, Change change) { 

    double dispensedQuarters = 0; 
    double dispensedDimes = 0; 
    double dispensedNickels = 0; 
    double dispensedPennies = 0; 
    double d = Double.parseDouble(vendingMachine.getFunds()); 

    if (d % .25 == 0) { 
     dispensedQuarters = d/.25; 
    } else if (d % .25 != 0) { 
     double remainder = d % .25; 
     d = d - remainder; 
     dispensedQuarters = d/.25; 

     if (remainder % .10 == 0) { 
      dispensedDimes = remainder/.10; 
     } else if (remainder % .05 == 0) { 
      dispensedNickels = remainder/.05; 
     } else if (remainder % .01 == 0) { 
      dispensedPennies = remainder/.01; 
     } else { 
      dispensedDimes = dispensedNickels = dispensedPennies = 0; 
     } 

    } else if (d % .10 == 0) { 
     dispensedDimes = d/.10; 
    } else if (d % .05 == 0) { 
     dispensedNickels = d/.10; 
    } 
} 

발견하는 함수를 작성하는 컴팩트 방법이 있나요을 10 센트, ​​10 센트, ​​센트, 동전 등이 반환되어야합니까?

+5

통화를 나타내는 데 부동 소수점 값을 사용하면 안됩니다. 정수를 사용하십시오. 여기서 100의 배수가 아닌 모든 값은 '센트'부분입니다. –

+0

감사합니다. 나는 그 사실을 기록 할 것입니다. – statsguyz

+0

기계는 무엇을 반환해야합니까? 가장 적은 수의 동전? –

답변

0

이 코드의 일부 문제가 있습니다. 당신이 밖으로짜리에 동전의 전체 나머지를 지불 할 수 있다면

if (remainder % .10 == 0) {

이 단지 당신을 알려줍니다 - 당신은 한푼 또는 둘 필요하면 당신을 말하지 않습니다. 예를 들어, 나머지가 0.23이라면이 조건은 거짓 일 것입니다.

} else if (remainder % .05 == 0) {

같은 문제를 해결합니다. 지불 할 금액이 0.07이라면이 조건은 거짓 일 수 있지만 여전히 니켈을 지불하는 것이 적절합니다.

else if (remainder % .01 == 0) {

이 검사는 필요로하지 않는 것, 그리고 코드가 더 컴팩트 만들 수 그것을 제거하기. 어떤 이유로 든 페니의 분수가 없으면 항상이 맞을 것입니다. (이는 의견에서 지적 된 바와 같이, 정수를 사용하여 피할 수, 반올림 오류로 될 수 있습니다.)

0

주의 : calculateChange - 매개 변수

public class QuarterDimeNickelPenny { 

    public static void main(String[] args) { 

     calculateChange(94); // Should be 3, 1, 1, 4 
     calculateChange(50); // Should be 2, 0, 0, 0 
     calculateChange(30); // Should be 1, 0, 1, 0 
     calculateChange(14); // Should be 0, 1, 0, 4 
     calculateChange(69); // Should be 2, 1, 1, 4 
     calculateChange(75); // Should be 3, 0, 0, 0 
    } 


    private static void calculateChange(int cents) { 
     int quarters = cents/25; 
     int leftover = cents - quarters * 25; 
     int dimes = leftover/10; 
     leftover = leftover - dimes * 10; 
     int nickels = leftover/5; 
     leftover = leftover - nickels * 5; 
     int pennies = leftover; 

     System.out.println(quarters + ", " + dimes + ", " + nickels + ", " + pennies); 
    } 

} 

시도로 센트의 수를 소요 이게 도움이되기를 바랍니다.

1

enum을 사용하면 더 우아하게이 작업을 수행 할 수 있습니다.

  • 은 그냥 enum를 사용하여 다른 Coin 객체를 생성하고, 생성자에서 값을 추가합니다. enum 인스턴스가 내림차순인지 확인하십시오.
    enum Coin { 
    
        QUARTER(25), DIME(10), NICKEL(5), PENNY(1); 
    
        private final int value; 
    
        private Coin(int value) { 
         this.value = value; 
        } 
    
        public int getValue() { 
         return this.value; 
        } 
    } 
    
  • 그럼 동전 모든 다른 유형의 반복, 나머지 값 코인보다 작은 값까지의 변화량으로부터 많은 코인을 빼야.

예제 코드 :

getCoins(95); 
// returns a list with 3 quarters and 2 dimes. 

위에 언급 코드는 실제로 동전의 최소 수를 반환 않습니다 - 적어도이 경우. 그러나 모든 경우에 반드시 그런 것은 아닙니다. 더 높은 가치의 동전 대신 더 낮은 가치의 동전을 돌려주는 것이 더 나은 경우가 있습니다.
예를 들어 DIME (값 10), NICKEL (값 5) 및 PENNY (값 1) 인 동전 (변경 사항은 45 일 것입니다. 최소 동전 수는 5입니다. 4 다임 및 1 페니) 8 (3 twelvies, 1 니켈 및 4 페니) 대신.

관련 문제