3
Good morning. For study purposes, I am making a simple application in Java RMI that simulates some operations (create account, check balance, debit etc.) on one or more accounts. For each account I create an object of the type Conta
containing its number and balance and the storage in a ArrayList
. The problem occurs when I need to retrieve a specific object in the array (using the account number as a parameter) to perform some operation (debit, credit, remove, etc...).
I’m using the method contas.indexOf(numero)
to return me the index of the array contas
, but it always returns me 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 given by parameter. I did some research and tried the form for (Conta busca : contas)
but it didn’t work either, even though I used a if (busca.numero == numero)
. When I use this if, it always gives true, as if the number of all accounts were the same. And when I use if(busca.numero.equals(numero)
netbeans shows an error in the statement.
Could someone 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();
}
}
}
indexOf
returns the index of an object, in case you are passing an int. You have to iterate the list to find– Sorack
Thank you all so much for your help. Now it’s working.
– Max Porcento