Modifica tu clase TicketMachine de manera que seamos capaces de indicar al crear máquinas si estas pueden o no vender tickets con descuento. En caso de que una máquina sea creada sin la posibilidad de vender tickets con descuento debe informar de ello cuando se invoque al método printTicketWithDiscount y no hacer nada más.
En caso de hacer descuento debe señalarlo en el precio final del billete.
NOTA: la solución la he dado en el constructor y en el método que le sigue.
--¿Por qué si digo en el constructor(cuando creo el objeto). boolean valorDescuento falso. cuando invoco el método printTicketWithDiscount aparece con descuento?
public class TicketMachine
{
// The price of a ticket from this machine.
private int price;
// The amount of money entered by a customer so far.
private int balance;
// The total amount of money collected by this machine.
private int total;
private boolean conDescuento;
/**
* Construtor con la posibilidad de hacer descuentos
*/
public TicketMachine(int cost, boolean valorDescuento)
{
price = cost;
balance = 0;
total = 0;
conDescuento = valorDescuento;
}
/**
* Método para máquinas sin descuento
*/
public void printTicketWithDiscount(){
int descuento = price-(price*10/100);
if(conDescuento = false){
System.out.println("Esta máquina no realiza descuentos.");
}
else{System.out.println("El billete " +price+"€, con descuento ha quedado en: " +descuento+ " euros. ");}
}
/**
* @Return The price of a ticket.
*/
public int getPrice()
{
return price;
}
/**
* Return The amount of money already inserted for the
* next ticket.
*/
public int getBalance()
{
return balance;
}
/**
* Receive an amount of money from a customer.
* Check that the amount is sensible.
*/
public void insertMoney(int amount)
{
if(amount > 0) {
balance = balance + amount;
}
else {
System.out.println("Use a positive amount rather than: " +
amount);
}
}
/**
* Print a ticket if enough money has been inserted, and
* reduce the current balance by the ticket price. Print
* an error message if more money is required.
*/
public void printTicket()
{
if(balance >= price) {
// Simulate the printing of a ticket.
System.out.println("##################");
System.out.println("# The BlueJ Line");
System.out.println("# Ticket");
System.out.println("# " + price + " cents.");
System.out.println("##################");
System.out.println();
// Update the total collected with the price.
total = total + price;
// Reduce the balance by the prince.
balance = balance - price;
}
else {
int amountLeftToPay;
amountLeftToPay = price -balance;
System.out.println("Error, la cantidad no es correcta. Faltan: " +amountLeftToPay+ " euros. ");
//System.out.println("You must insert at least: " +
//(price - balance) + " more cents.");
}
}
/**
* Return the money in the balance.
* The balance is cleared.
*/
public int refundBalance()
{
int amountToRefund;
amountToRefund = balance;
balance = 0;
return amountToRefund;
}
public int emptyMachine()
{
int recaudacion = -1;
if (balance == 0) {
recaudacion = total;
total = 0;
}
return recaudacion;
}
}