[RESOLVIDO] Array list Alterar

7 respostas
Fabiolafas

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

import corejava.*;
import java.util.ArrayList;
import java.io.*;

public class Principal
{	public static void main (String[] args)
	{
	//ArrayList<Pessoa>  listaDePessoas = new ArrayList<Pessoa>(10);
	//ArrayList<Escola>  listaDeEscolas = new ArrayList<Escola>(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!");
			}
		}
	}
}

7 Respostas

Marcelo_de_Andrade

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.

nel

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:

Fabiolafas

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!

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.

Fabiolafas
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.

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());

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...

nel

Oi!

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

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
}

É 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 :)
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.

Fabiolafas

Obrigadaaaa!!!!
Deu certinho! Rs..

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;

                    }
Criado 19 de setembro de 2011
Ultima resposta 20 de set. de 2011
Respostas 7
Participantes 3