Stack Overflow en español Asked by brettbust on August 27, 2021
El programa consiste en una cuenta bancaria. el cual muestro a continuación:
package com.company;
import java.util.Scanner;
public class Main {
public static boolean changeBalance(Account account, Operation operation, Long sum) {
if (operation == Operation.DEPOSIT) {
account.balance += sum;
return true;
} else if (operation == Operation.WITHDRAW) {
if (account.balance < sum) {
System.out.println("Not enough money to withdraw.");
return false;
} else {
account.balance -= sum;
return true;
}
}
}
//comento el switch el cual si funciona correctamente
/* switch (operation) {
case DEPOSIT:
account.balance += sum;
return true;
case WITHDRAW:
if (account.balance < sum) {
System.out.println("Not enough money to withdraw.");
return false;
} else {
account.balance -= sum;
return true;
}
default:
return false;
}
}*/
enum Operation {
DEPOSIT,
WITHDRAW
}
static class Account {
private String code;
private Long balance;
public String getCode() {
return code;
}
public Long getBalance() {
return balance;
}
public void setBalance(Long balance) {
this.balance = balance;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] parts = scanner.nextLine().split("\s+");
Account account = new Account();
account.setBalance(Long.parseLong(parts[0]));
Operation operation = Operation.valueOf(parts[1]);
Long sum = Long.parseLong(parts[2]);
if (changeBalance(account, operation, sum)) {
System.out.println(account.getBalance());
}
}
}
Este programa me arroja un error usando el if:
"missing return statement"
En cambio cuando utilizo en lugar del if el switch (el cual coloque en este ejemplo como un comentario) el programa no arroja ningún error y funciona correctamente, pero utilice las mismas instrucciones tanto para uno como para el otro. no entiendo cual es la diferencia o como se puede solucionar este error usando el if.
Fácil, tu función siempre tiene que retornar un valor booleano en su ejecución:
switch (operation) {
case DEPOSIT:
account.balance += sum;
return true;
case WITHDRAW:
if (account.balance < sum) {
System.out.println("Not enough money to withdraw.");
return false;
} else {
account.balance -= sum;
return true;
}
default:
return false;
}
tanto en el caso "Deposit" o "WITHDRAW" devuelve un boolean en caso que no sea ni "Deposit" , ni "WITHDRAW" devuelve false ahora si miras tu condiconal if te vas a dar cuenta que :
if (operation == Operation.DEPOSIT) {
account.balance += sum;
return true;
} else if (operation == Operation.WITHDRAW) {
if (account.balance < sum) {
System.out.println("Not enough money to withdraw.");
return false;
} else {
account.balance -= sum;
return true;
}
}
falta un caso para que tenga el mismo comportamiento que el switch, que es el caso ni DEPOSIT ni WITHDRAW :
if (operation == Operation.DEPOSIT) {
account.balance += sum;
return true;
} else if (operation == Operation.WITHDRAW) {
if (account.balance < sum) {
System.out.println("Not enough money to withdraw.");
return false;
} else {
account.balance -= sum;
return true;
}
}
solo debes agregar un return al final del metodo :
public static boolean changeBalance(Account account, Operation operation, Long sum) {
if (operation == Operation.DEPOSIT) {
account.balance += sum;
return true;
} else if (operation == Operation.WITHDRAW) {
if (account.balance < sum) {
System.out.println("Not enough money to withdraw.");
return false;
} else {
account.balance -= sum;
return true;
}
}
return false;
}
Correct answer by altoqueperro on August 27, 2021
Ya la respuesta fue dada por @altoqueperro, pero me gustaría proponer un enfoque con un solo return.
public static boolean changeBalance(Account account, Operation operation, Long sum) {
//Declarar una variable resultado
boolean resultado = false;
if (operation == Operation.DEPOSIT) {
account.balance += sum;
resultado = true;
} else if (operation == Operation.WITHDRAW) {
if (account.balance < sum) {
System.out.println("Not enough money to withdraw.");
// aquí no hace falta asignar el resultado porque ya es false
} else {
account.balance -= sum;
resultado = true;
}
}
return resultado;
}
Answered by Pablo Gutiérrez on August 27, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP