Good morning. For study purposes, I am making a simple application in RMI Java that simulates some operations (create account, check balance, debit etc ...) in one, or more, accounts. For each account created I generate an object of type Conta
containing its respective number and balance and store it in ArrayList
. The problem occurs when I need to retrieve a specific object in the array (using the account number as parameter) to perform some operation (debit, credit, remove and etc ...).
I'm using the contas.indexOf(numero)
method to return the array index contas
, but it always returns the index -1.
If I pass some index, for example, Conta conta = contas.get(3)
, it returns me the object that is in that position. But I need the index according to the number reported per parameter. I did some research and tried the for (Conta busca : contas)
form but it also did not work even though I was using if (busca.numero == numero)
. When I use this if, it always gives true, as if the number of all accounts was the same. And when I use if(busca.numero.equals(numero)
netbeans has an error in the declaration.
Could anyone help me?
Thank you.
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Scanner;
public class ClienteStart {
private static ArrayList<Conta> contas = new ArrayList<Conta>();
private static int numero;
private static double valor;
private static IFuncoesBanco Funcs;
private static Scanner scanner;
// Aqui será simulado o "menu"
public static void listaMetodos() {
System.out.println("/****************************************/");
System.out.println("/* Sistema de Contas de banco */");
System.out.println("/* Banco da Praça */");
System.out.println("/****************************************/\n");
System.out.println("Escolha uma opção:");
System.out.println("1 => Inserir nova Conta");
System.out.println("2 => Excluir Conta");
System.out.println("3 => Debitar da Conta");
System.out.println("4 => Creditar da Conta");
System.out.println("5 => Consultar Conta");
System.out.println("6 => Sair");
System.out.println("Digite sua opção: ");
System.out.println("/****************************************/");
}
// Aqui será o método a ser executado será escolhido
// de acordo com a opção passada pelo teclado
public static void executeMetodo(int opcao) {
try
{
switch (opcao) {
case 1:
System.out.println("Função 'Inserir' escolhida.");
inserir();
break;
case 2:
System.out.println("Função 'Excluir' escolhida.");
excluir();
break;
case 3:
System.out.println("Função 'Debitar' escolhida.");
debitar();
break;
case 4:
System.out.println("Função 'Creditar' escolhida.");
creditar();
break;
case 5:
System.out.println("Função 'Consultar' escolhida.");
consultar();
break;
case 6:
System.out.println("Encerrado");
System.exit(0);
default:
System.out.println("Opção inválida");
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void inserir() throws RemoteException, NotBoundException {
System.out.println("Digite o número da conta:");
numero = scanner.nextInt();
System.out.println("Digite o valor:");
valor = scanner.nextDouble();
Conta contaFunc = Funcs.inserir(numero, valor);
contas.add(contaFunc);
System.out.println("A conta: "+contaFunc.numero+"foi criada");
}
private static void excluir() throws RemoteException, NotBoundException {
System.out.println("Digite o número da conta:");
numero = scanner.nextInt();
valor = 0;
int contaFunc = Funcs.excluir(contas.indexOf(numero)+1);
contas.remove(contaFunc);
System.out.println("A conta: "+contaFunc+"foi removida");
}
private static void debitar() throws RemoteException, NotBoundException {
System.out.println("Digite o número da conta:");
numero = scanner.nextInt();
System.out.println("Digite o valor:");
valor = scanner.nextDouble();
Conta contaFunc = contas.get(contas.indexOf(numero)+1);
contaFunc = Funcs.debitar(contaFunc, valor);
contas.add(contas.indexOf(numero)+1,contaFunc);
System.out.println("Debitado: "+contaFunc.valor+", da conta :"+contaFunc.numero);
}
private static void creditar() throws RemoteException, NotBoundException {
System.out.println("Digite o número da conta:");
numero = scanner.nextInt();
System.out.println("Digite o valor:");
valor = scanner.nextDouble();
Conta contaFunc = (Conta) contas.get(contas.indexOf(numero)+1);
contaFunc = Funcs.creditar(contaFunc, valor);
contas.add(contas.indexOf(numero)+1,contaFunc);
System.out.println("Creditado: "+contaFunc.valor+", da conta :"+contaFunc.numero);
}
private static void consultar() throws RemoteException, NotBoundException {
System.out.println("Digite o número da conta:");
numero = scanner.nextInt();
for (Conta busca: contas) {
if (busca.numero == numero) {
System.out.println("Numero: "+busca.numero+" Saldo: "+busca.valor);
}
}
}
public static void main(String[] args) {
try
{
// Localiza o serviço pelo nome
Funcs = (IFuncoesBanco) Naming.lookup("rmi://192.168.1.10:3000/Banco");
scanner = new Scanner(System.in).useLocale(Locale.US);
int opcao;
while (true) {
listaMetodos();
opcao = scanner.nextInt();
executeMetodo(opcao);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}