Dúvida sobre o ArrayList

Bom, eu estou iniciando meu aprendizado na linguagem java. Atualmente estou tentando montar um projeto bem básico e primata sobre um cadastro bancário de um cliente.
Meu programinha consiste na seguinte ideia :
Gero um menu, onde existe a possibilidade de 4 operações : 1 - Cadastrar um nome + saldo. 2 - Exibir o saldo. 3 - Depositar um valor. 4 - Retirar o valor.
A principio eu consegui executar um código que executa todas as 4 operações, porém, por ser simples, meu código somente armazenava um único cliente, logo um único saldo.
Me veio a ideia de aprimorar utilizando a classe ArrayList, então eis que me surge uma grande ideia :
Quero armazenar vários clientes, e cada cliente com seu respectivo saldo bancário, podem me dar uma luz ?

Minha Classe Principal, que chama os métodos já criados.

[code]package br.com.marcosbuganeme.poo;

public class ClassePrincipal {

public static void main(String[] args) {	
	
	Metodos conta = new Metodos();
	
	conta.validaMenu();

}

}
[/code]

Minha classe de Métodos

[code]package br.com.marcosbuganeme.poo;

import javax.swing.JOptionPane;
import java.util.ArrayList;

public class Metodos {

String cliente; 
double saldo, insercaoSaldo, remocaoSaldo;
boolean operador = true;

ArrayList <String> clientes = new ArrayList<> ();
ArrayList <Double> saldos = new ArrayList<> ();
ArrayList <Double> insereSaldos = new ArrayList<> ();
ArrayList <Double> removeSaldos = new ArrayList<> ();

void cadastroCliente(){
	cliente = JOptionPane.showInputDialog("Nome do cliente");
	clientes.add(cliente);
	saldo = Double.parseDouble(JOptionPane.showInputDialog("Saldo do cliente"));
	saldos.add(saldo);
}

void exibeSaldo(){
	JOptionPane.showMessageDialog(null, "Sr. " + cliente + " seu saldo é de: " + saldo);
}

void insereSaldo() {
	insercaoSaldo = Double.parseDouble(JOptionPane.showInputDialog("Valor do deposito"));
	saldo += insercaoSaldo;
	exibeSaldo();
}

void retiraSaldo(){
	remocaoSaldo = Double.parseDouble(JOptionPane.showInputDialog("Valor da retirada"));
	if (remocaoSaldo > saldo){
		JOptionPane.showMessageDialog(null, "Sr. " + cliente + " seu saldo não é suficiente para a realizar esse tipo de operação.");
	} else {
		saldo -= remocaoSaldo;
		exibeSaldo();
	}		
}

void transfereSaldo(){
	
}

void validaMenu(){
	while (operador == true){
		int menu = Integer.parseInt(JOptionPane.showInputDialog("\n\tMenu\n"
				+ "\n1 - Cadastrar Cliente"
				+ "\n2 - Exibir saldo"
				+ "\n3 - Depositar"
				+ "\n4 - Retirarada"
				+ "\n5 - Sair"));
	
		switch (menu){
			case 1:
				cadastroCliente();
				break;
			
			case 2:
				exibeSaldo();
				break;
			
			case 3:
				insereSaldo();
				break;
			
			case 4:
				retiraSaldo();
				break;
			case 5:
				JOptionPane.showMessageDialog(null, "Software finalizado.");
				operador = false;
				break;
			default:
				JOptionPane.showMessageDialog(null, "Insira um numero valido.\nTente Novamente");
				break;
		}
	}
}

}[/code]

Existe algumas inconsistências no meu código, porquê como já dito, eu estou tentando aprimorar adicionando ArrayList, a ideia que me surgiu foi de criar 4 tipos de listas, uma para cadastrar os nomes dos clientes, outra para cadastrar os saldos do cliente, outra para cadastrar o tanto que foi inserido e outra para cadastrar o que foi removido, porquê eu achei que seria mais fácil interligar esses dados, porém eu percebi que não tem como eu fazer uma ligação direta dos dados apenas com ArrayList, então cheguei na conclusão que eu devo utilizar algum laço de repetição para percorrer a lista e que possivelmente não necessito dos 4 tipos de ArrayList, porém eu já estou sem dormir a algum tempo hehe e não estou conseguindo mais pensar em novos métodos para implementar isso, por mais simples que possa ser xD

Obrigado pela atenção

Você tem que criar uma classe Cliente com esses atributos, e fazer uma lista de clientes

Não consegui compreender a lógica repassada. Ao meu ver, não é necessário a criação de uma nova classe e no caso eu somente armazenaria 2 variáveis, o nome e o saldo corrente, ambos são de tipos diferentes. As outras 2 operações (deposito e retirada) necessitam da variável saldo da Classe Métodos. Poderia explicar detalhadamente a sua lógica? Pois tenho uma nítida impressão de que estou fazendo uma tempestade em um copo d’água e meu problema é bem simples de resolver hehe. Obrigado.

Não consegui compreender a lógica repassada. Ao meu ver, não é necessário a criação de uma nova classe e no caso eu somente armazenaria 2 variáveis, o nome e o saldo corrente, ambos são de tipos diferentes. As outras 2 operações (deposito e retirada) necessitam da variável saldo da Classe Métodos. Poderia explicar detalhadamente a sua lógica? Pois tenho uma nítida impressão de que estou fazendo uma tempestade em um copo d’água e meu problema é bem simples de resolver hehe. Obrigado.[/quote]

Você pode até dar um jeito de fazer sem a classe Cliente, sugerida pelo Rodrigo Sasaki. Mas é pior.

Java é uma linguagem Orientada a Objetos, e portanto você deve pensar em objetos. Seria melhor ter uma classe Conta com um identificador e um saldo. Na classe conta, você coloca métodos pra creditar/debitar. Assim cada conta tem o seu contexto, você não precisa ficar usando várias listas pra saber de quem é o saldo (cruzando a lista de clientes com a de saldos).

Não consegui compreender a lógica repassada. Ao meu ver, não é necessário a criação de uma nova classe e no caso eu somente armazenaria 2 variáveis, o nome e o saldo corrente, ambos são de tipos diferentes. As outras 2 operações (deposito e retirada) necessitam da variável saldo da Classe Métodos. Poderia explicar detalhadamente a sua lógica? Pois tenho uma nítida impressão de que estou fazendo uma tempestade em um copo d’água e meu problema é bem simples de resolver hehe. Obrigado.[/quote]

Você pode até dar um jeito de fazer sem a classe Cliente, sugerida pelo Rodrigo Sasaki. Mas é pior.

Java é uma linguagem Orientada a Objetos, e portanto você deve pensar em objetos. Seria melhor ter uma classe Conta com um identificador e um saldo. Na classe conta, você coloca métodos pra creditar/debitar. Assim cada conta tem o seu contexto, você não precisa ficar usando várias listas pra saber de quem é o saldo (cruzando a lista de clientes com a de saldos).[/quote]

Sim sim, eu estava vacilando, consegui realizar facilmente a operação. Agora sim entendi completamente o conceito de Orientação a objeto. Como eu havia dito, o problema era fácil e eu estava fazendo uma tempestade em um copo d’água xD. Obrigado aos 2 por terem me respondido.

Olá Marcos,

Cara vamos pensar de uma forma simples, afinal de contas para mim Java é simples, você precisa pensar de uma forma diferente.

Primeiro:

  • Crie uma a sua classe Cliente, depois as variaveis String Nome e Double Saldo e agora os metodos cadastraNome e cadastraSaldo, veja:
public class Cliente{
String nome;
Double saldo;

public void cadastraNome(String nome) {
this.nome = nome;
}

public void cadastraSaldo(Double saldo) {
this.saldo = saldo;
}
}

Até aqui simples, agora a grande ideia, você pega sua classe principal e chama uma lista, nela vc armazena TODOS os registro que “deseja”, veja:

public class Principal{
 public static void main(String[] args){
   ArrayList<Cliente> clientes = new ArrayList<>();
   for(int i=0; i < 10; i++){
      //CHAMA CLIENTE       
      Cliente cliente = new Cliente();
     
      //E SETA VARLORES PARA CADA CADASTRO (NOME E VALOR)
      cliente.nome('ANA');
      cliente.saldo(110.0);
      
      //Adiciona na Lista
      clientes.add(cliente);
   }

 }
}

Pronto,

Lembre-se, você primeiramente precisa ter o objeto Cliente, nele você coloca as ações (metodos) e seus atributos (variavel). Depois você cria uma classe Main(Principal) e cria uma lista de clientes, nela você instancia cliente, seta os valores e joga pra dentro da lista…

Qualquer duvida posta ai…

Abs

Desculpe,

Eu não inclui as interresões com usuario (JOption) para fica simples o entendimento. Mas cara, o principio é o mesmo…