[RESOLVIDO] Array list Alterar

Estou fazendo este programinha de cadastros, mas não sei como implementar o ALTERAR no case 4, alguem poderia me ajudar?

[code]import corejava.;
import java.util.ArrayList;
import java.io.
;

public class Principal
{ public static void main (String[] args)
{
//ArrayList listaDePessoas = new ArrayList(10);
//ArrayList listaDeEscolas = new ArrayList(10);

	ArrayList<Pessoa>  listaDePessoas = null;
	ArrayList<Escola>  listaDeEscolas = null;


	String nome;
	//double valorDia, valorMes;
	String turno;
	int qtdSemanal, resposta, qtdAula;
	//int numDias, resposta;
	boolean achou;

	Pessoa umaPessoa = null;
	Escola umaEscola = null;


		try
	{  ObjectInputStream in = new ObjectInputStream
	       (new FileInputStream("dados.dat"));
	   listaDePessoas = (ArrayList<Pessoa>)in.readObject();
	   listaDeEscolas = (ArrayList<Escola>)in.readObject();
	   Pessoa.setContador(((Integer)in.readObject()).intValue());
	   Escola.setContador(((Integer)in.readObject()).intValue());
	   in.close();

	}
	catch(FileNotFoundException e)  // nao encontrou o arquivo
	{	listaDeEscolas = new ArrayList<Escola>(10);
		listaDePessoas = new ArrayList<Pessoa>(10);
	}
	catch(IOException e) // erro no disco
	{	e.printStackTrace();
		System.exit(2);
	}
	catch(ClassNotFoundException e) // nao encontrou a classe
	{	e.printStackTrace();
		System.exit(3);
	}


	boolean continua = true;
	while (continua)
	{	System.out.println('\n' + "O que você deseja fazer?");
		System.out.println('\n' + "1. Cadastrar");
		System.out.println("2. Remover");
		System.out.println("3. Listar");
		System.out.println("4. Alterar");
		System.out.println("5. Sair");

		int opcao = Console1.readInt('\n' + "Digite um número entre 1 e 4:");

	  	switch (opcao)
		{	case 1:
		    {
				System.out.println('\n' + "1. Escola");
				System.out.println("2. Pessoa");
                opcao = Console1.readInt('\n' + "Digite um número entre 1 e 2:");
                nome = Console1.readLine('\n' + "Digite o nome: ");
                if (opcao == 1)
                {	umaEscola = new Escola(nome);
                	listaDeEscolas.add(umaEscola);
                	System.out.println('\n' + "Escola cadastrado com sucesso!");
                }
                else
                {
                	achou = false;
                	resposta = Console1.readInt('\n' + "Digite o número da Escola:");
                	for (int i = 0; i < listaDeEscolas.size(); i++)
					{	umaEscola = listaDeEscolas.get(i);

						if (resposta == umaEscola.getNumero())
						{	achou = true;
							break;
						}
					}

                	if (!achou)
                	{	umaEscola = null;
                		System.out.println('\n' + "Escola Inexistente!");
                	}

                	System.out.println('\n' + "1. Aluno");
					System.out.println("2. Professor");
                	opcao = Console1.readInt('\n' + "Digite um número entre 1 e 2:");
					if (opcao == 1)
					{	qtdAula = Console1.readInt('\n' + "Digite a qtd. Horas Aulas: ");
						turno = Console1.readLine('\n' + "Digite o turno(diurno, vespertino ou noturno): ");

						umaPessoa = new Aluno(nome,turno,qtdAula,umaEscola);
					}
					else
					{	qtdSemanal = Console1.readInt('\n' + "Digite quantos dias trabalhados na semana: ");
						qtdAula = Console1.readInt('\n' + "Digite quantas horas por dia: ");
						umaPessoa = new Professor(nome, qtdSemanal, qtdAula, umaEscola);
					}

                	listaDePessoas.add(umaPessoa);
                	System.out.println('\n' + "Pessoa cadastrada com sucesso!");



                }

				break;
			}

			case 2:
			{
                System.out.println('\n' + "1. Escola");
				System.out.println("2. Pessoa");
                opcao = Console1.readInt('\n' + "Digite um número entre 1 e 2:");
				resposta = Console1.readInt('\n' + "Digite o número que você deseja remover: ");
				achou = false;
				int x;


				if(opcao == 1)
				{
					for (x = 0; x < listaDeEscolas.size(); x++)
					{	umaEscola = listaDeEscolas.get(x);

						if (resposta == umaEscola.getNumero())
						{	achou = true;
							break;
						}
					}

					if (achou)
					{	achou = false;
						for (int i = 0; i < listaDePessoas.size(); i++)
						{	umaPessoa = listaDePessoas.get(i);
							if (umaPessoa.getEscola() != null)
							{
								if (resposta == umaPessoa.getEscola().getNumero())
								{	achou = true;
								}
							}
						}

						if (achou)
						{	System.out.println('\n' + "Escola sendo utilizada!");
						}
						else
						{	listaDeEscolas.remove(x);
							System.out.println('\n' + "Escola removida com sucesso!");
						}
					}
					else
					{	System.out.println('\n' + "Escola não encontrada!");
					}
				}
				else
				{	int i;
					for (i = 0; i < listaDePessoas.size(); i++)
					{	umaPessoa = listaDePessoas.get(i);

						if (resposta == umaPessoa.getNumero())
						{	achou = true;
							break;
						}
					}

					if (achou)
					{	listaDePessoas.remove(i);
						System.out.println('\n' + "Pessoa removida com sucesso!");
					}
					else
					{	System.out.println('\n' + "Pessoa não encontrado!");
					}

				}



				break;
			}

			case 3:
			{

				if (listaDeEscolas.isEmpty())
				{
					System.out.println('\n' + "Não há Escolas na lista.");
				}
				else
				{	System.out.println("");
				    System.out.println('\n' + "Lista de Escolas");
					for (int i = 0; i < listaDeEscolas.size(); i++)
					{	umaEscola = listaDeEscolas.get(i);
						System.out.println ("Numero = " + umaEscola.getNumero() +
						                  "  Nome = " + umaEscola.getNome());
					}
				}

				if (listaDePessoas.isEmpty())
				{
					System.out.println('\n' + "Não há pessoas na lista.");
				}
				else
				{	System.out.println("");
				    System.out.println('\n' + "Lista de Pessoas");
					for (int i = 0; i < listaDePessoas.size(); i++)
					{	umaPessoa = listaDePessoas.get(i);
					/*	if(umEmpregado instanceof EmpregadoDiarista)
						{	System.out.println ("Empregado Diarista");
						}
						else
						{	System.out.println ("Empregado Mensalista");
						}  */

						System.out.println ("Numero = " + umaPessoa.getNumero() +
						                  "  Nome = " + umaPessoa.getNome()+
						                  "  Qtd. Horas = " + umaPessoa.gerarCargaHoraria());
						if (umaPessoa.getEscola() != null)
						{
							System.out.println ("Escola = " + umaPessoa.getEscola().getNome());
						}
					}
				}
				break;
			}
			
			
			case 4:
                           ????????????????????
			
			}
				break;
			}
			case 5:

			String respSalvar = Console1.readLine('\n' + "Deseja salvar as alterações? (s/n) ");

				if (respSalvar.equals("s"))
				{	try  // o compilador exige pois ao escrever no disco tem grande chance de dar erro
					{    // ou entao propague o erro
						ObjectOutputStream out = new ObjectOutputStream
					         (new FileOutputStream("dados.dat"));
					    out.writeObject(listaDeEscolas); // serializou o objeto
					    out.writeObject(listaDePessoas); // serializou o objeto
					    out.writeObject(new Integer (Escola.getContador())); //serializou a variavel de classe
					    out.writeObject(new Integer (Pessoa.getContador())); //serializou a variavel de classe
					    out.close();			// Integer porque contador é tipo primitivo e estamos gravando objetos

					}
					catch(FileNotFoundException e)
					{	e.printStackTrace();
						System.exit(1);
					}
					catch(IOException e) //nao pode inverter os catch porque FileNotFoundException estende IOException
					{	e.printStackTrace();
						System.exit(2);
					}


				}
				else
				{	System.out.println("Os dados nao foram salvos!");
				}




				continua = false;
				break;

			default:
				System.out.println('\n' + "Opção inválida!");
		}
	}
}

}
[/code]

Vou tentar ajudar, pelo que vi de forma superficial, vai servir pra alterar tanto o aluno quanto a escola, não é?

  • Solicita quem vai alterar, escola ou aluno?
  • Entrada de dados referente ao aluno/escola x
  • Localiza o registro
  • Entrada de dados para o novo valor
  • Altera os dados

Me desculpe se falei besteira e me corrijam caso tenha errado em algo.

Fabiolafas,

é fundamental que poste a sua dúvida, dizer que não consegue realizar a ação número 4 não esclarece muita coisa.
Qual a sua real necessidade ? :slight_smile:

Quero alterar apenas a Escola por enquanto, me ajudando nesta eu desenvolvo as demais…

Na verdade, quero alterar um array list de uma classe Escola (listaDeEscolas), nela tenho os atributos número e nome.

Quero poder alterar o número e nome!

Considerando que tem apenas o nome e o número, você deve pedir que o usuário digite o número e/ou nome da Escola no qual deseja alterar.
Feito isso, você faz uma varredura na sua lista e verifica se existe esse objeto nela, caso exista, você faz uma nova pergunta.

Qual o novo nome e/ou número da Escola?
Feito isso, basta setar o objeto Escola e não será nem necessário adicionar na lista novamente, pois o conteúdo da lista será atualizado por referência.
Exemplo, caso não tenho entendido:

// supondo que o objeto esteja na posição 10 (nesse caso 9, pois 0, 1, 2....9). Escola escola = suaList.get(10); escola.setNome("Novo Nome"); escola.setNumero("Novo numero");

Não precisa fazer mais nada, sua lista já está atualizada.

[quote=nel]Considerando que tem apenas o nome e o número, você deve pedir que o usuário digite o número e/ou nome da Escola no qual deseja alterar.
Feito isso, você faz uma varredura na sua lista e verifica se existe esse objeto nela, caso exista, você faz uma nova pergunta.

Qual o novo nome e/ou número da Escola?
Feito isso, basta setar o objeto Escola e não será nem necessário adicionar na lista novamente, pois o conteúdo da lista será atualizado por referência.
Exemplo, caso não tenho entendido:

// supondo que o objeto esteja na posição 10 (nesse caso 9, pois 0, 1, 2....9). Escola escola = suaList.get(10); escola.setNome("Novo Nome"); escola.setNumero("Novo numero");

Não precisa fazer mais nada, sua lista já está atualizada.

[code] case 4:
{
System.out.println(’\n’ + “O que deseja alterar?”);
System.out.println(’\n’ + “1. Escola”);
System.out.println(“2. Pessoa”);
opcao = Console1.readInt(’\n’ + “Digite um número entre 1 e 2:”);
int num;// essa é uma variavel localnão é atributo de classe… ok

                if (opcao == 1)
                {
					if (listaDeEscolas.isEmpty())
					{
						System.out.println('\n' + "Não há Escolas na lista.");
					}
					else
					{	System.out.println("");
					    System.out.println('\n' + "Lista de Escolas");
						for (int i = 0; i < listaDeEscolas.size(); i++)
						{	umaEscola = listaDeEscolas.get(i);
							System.out.println ("Numero = " + umaEscola.getNumero() +
							                  "  Nome = " + umaEscola.getNome());

							                  {
							                  	 int num1 = Console1.readInt('\n' + "Digite o numero da Escola que deseja alterar: ");

							                     int num2 = Console1.readInt('\n' + "Digite o novo numero da Escola: ");
							                     umaEscola = listaDeEscolas.get(10);
							                     umaEscola.setNumero();
												 System.out.println ("Numero = " + umaEscola.getNumero());[/code]

[b]Fiz assim como vc disse, mas não está funcionando… Já tentei de várias formas e nada!

Bem, mas que eu quero é basicamente isso!

Ele lista primeiro o que eu tenho cadastrado, digito o numero que quero mudar e depois me mostra o número modificado…[/b]

[/quote]

Oi!

Não é bem assim para ser feito, veja um modo de ser feito:

[code]for(Escola escola : listaDeEscolas) {
if(escola.getNumero() == numero) {
String nome = “Novo nome”;
String num = “novo numero”;
escola.setNome(nome);
escola.setNumero(num);

  //finaliza a iteração sob a lista
  break;

}// fim do if
}[/code]

É basicamente isso. Teste e poste os resultados.
Há, confirme com um System.out.println() da vida, se os valores digitados estão sendo lidos corretamente :slight_smile:
E um adendo, se for compar o nome digitado com o da escola, use equals(). Eu usei ‘==’ por supor que seja um int, ou seja, inteiro do tipo primitivo, ok?
Caso seja um Wrapper (Integer) use o equals() também.

Abraços.

Obrigadaaaa!!!
Deu certinho! Rs…

[code]case 4:
{
System.out.println(’\n’ + “O que deseja alterar?”);
System.out.println(’\n’ + “1. Escola”);
System.out.println(“2. Pessoa”);
opcao = Console1.readInt(’\n’ + “Digite um número entre 1 e 2:”);
int num;// essa é uma variavel localnão é atributo de classe… ok

                if (opcao == 1)
                {
					if (listaDeEscolas.isEmpty())
					{
						System.out.println('\n' + "Não há Escolas na lista.");
					}
					else
					{	System.out.println("");
					    System.out.println('\n' + "Lista de Escolas");
						for (int i = 0; i < listaDeEscolas.size(); i++)
						{	umaEscola = listaDeEscolas.get(i);
							System.out.println ("Numero = " + umaEscola.getNumero() +
							                  "  Nome = " + umaEscola.getNome());


							                  	   int num1 = Console1.readInt('\n' + "Digite o numero da Escola que deseja alterar: ");

							                  	   Escola escola = listaDeEscolas.get(i);
							                  	   if(escola.getNumero() == num1)    	{
							                  	   }
                                                   int num2 = Console1.readInt('\n' + "Digite o novo numero da Escola: ");
                                                   String nome2 = Console1.readLine('\n' + "Digite o novo nome da Escola: ");
                                                   escola.setNumero(num2);
                                                   escola.setNome(nome2);

                                                   System.out.println ("Numero = " + umaEscola.getNumero());
												   System.out.println ("Numero = " + umaEscola.getNome());





							               	     }
					                   	}
                               }

                           break;

                }

[/code]