2014-12-12 1 views
0

돈이 충분하지 않고 제로 이하로 떨어지지 않으면 내 방법 payGourmet 및 payEconomical 잔액이 변경되지 않도록하려고합니다. 또한 내 loadMoney 메서드가 150을 초과하지 않지만 여전히 기본에서 지정된 번호를 추가합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?추가 된 변수가 지정된 수를 초과하지 않도록하십시오.

Import java.util.Scanner; 

public class LyyraCard { 

private double balance; 

public LyyraCard(double balanceAtStart) { 
    this.balance = balanceAtStart; 
} 
public String toString() { 
    return "The card has " + this.balance + " euros"; 
} 
public void payEconomical() { 
    if (this.balance > 0) { 
     this.balance -= 2.5; 
    } 
} 
public void payGourmet() { 
    if (this.balance > 0) { 
     this.balance -= 4.0; 
    } 
} 

public void loadMoney(double amount) { 
    if (this.balance < 150) { 
     this.balance += amount; 
    } 

} 

} 

public class Main { 

public static void main(String[] args) { 
    // add here code that tests LyraCard. However before doing 77.6 remove the 
    // other code 
    LyyraCard card = new LyyraCard(10); 
    System.out.println(card); 

    card.payEconomical(); 
    System.out.println(card); 

    card.payGourmet(); 
    System.out.println(card); 

    card.payGourmet(); 
    System.out.println(card); 

    card.loadMoney(10); 
    System.out.println(card); 

    card.loadMoney(200); 
    System.out.println(card); 

} 

}

+1

사용 0보다 우수하고 4 (또는 2.5)를 뺀 값입니다. 예를 들어 잔액이 2 인 경우 어떻게해야합니까? loadMoney에 대해서도 같은 이야기입니다. –

답변

1

당신은 균형이 0보다 큰 경우 확인하고 다음 음의 균형을 끝낼 수있는 금액 차감 :

public void payEconomical() { 
    if (this.balance > 0) { 
    this.balance -= 2.5; 
    } 
} 

balance = 1 경우이 마이너스를 얻을 것을 균형 (-1.5). loadMoney에서 현재 여부를 확인해야 할

if (this.balance >= 4.0) { 
... 

과 :

당신은 균형 당신이 payGourmet에 대한 마찬가지로

public void payEconomical() { 
    if (this.balance >= 2.5) { 
    this.balance -= 2.5; 
    } 
    else { 
    // There isn't enough money 
    } 
} 

을 뺄 수있는 양보다 같거나 큰 경우 확인해야 잔액과 추가 된 금액이 150보다 작거나 같으면 150 :

if (this.balance + amount <= 150.0) { 
    this.balance += amount; 
} 
else { 
    // Amount too large. 
} 
0

값을 최소값 또는 최대 값으로 제한하려면 Math.min() 또는 Math.max()을 사용하십시오.

int valueA = -50; 

valueA = Math.max(valueA, 0); //valueA is now 0; 

int valueB = 200; 

valueB = Math.min(valueB, 150); //valueB is now 150; 

당신은

int valueC = -50; 

valueC = Math.min(Math.max(valueC, 0), 150); //valueC is now 0 

int valueD = 200; 

valueD = Math.min(Math.max(valueC, 0), 150); //valueD is now 150 

편집 두 가지 방법 사용, 상단 하한으로 제한하려는 경우 : 예를 들어, 그래서 당신은 균형 여부를 확인

public void loadMoney(double amount) { 
    this.balance = Math.min(this.balance + amount, 150); 
} 
+0

경제적 인 프로그램에서는 그렇게하지 않을 것입니다. $ 2000로 카드를 적재하면 최소한 $ 1850이 희박 해집니다. 전송을 거부하는 것이 좋습니다. –

+0

이것은 OP가 요구 한 것입니다. 그는 자신의 균형 분야가 150 개로 제한되기를 원합니다. 이것이 어떻게 해야하는지입니다. OPs 프로그램에는 전송을 거부하는 기능이 없습니다. – Marv

+1

OP는 돈을 버릴 것을 요구하지 않았다. 현재 잔액과 금액이 150을 초과하지 않는 경우 OP는 지정된 금액 (1, 10, 13, 103 또는 150)을 추가하라는 요청을했습니다. '... 150을 초과하지는 않지만 여전히 기본 번호를 추가합니다.'- OP에 '10'과 '200'을 추가하라고 알려줍니다 (주 기능 참조). 이것은 다르게 해석 될 수 있지만 경제적 인 프로그램에서는 단순히 돈을 낭비하지 않습니다. –

관련 문제