Array overriding elements

0

I made the registraReclamacao() method in this class and every time I call it on main, it overwrites and only stores the last record.

package testelp2;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class Registro {

    ArrayList<Atributos> reclamacao = new ArrayList<>();
    Scanner s = new Scanner(System.in);
    Random random = new Random();

    Atributos atributos = new Atributos();

    public void registraReclamacao() {
        atributos.setNumeroIdentificacao(random.nextInt(1000));
        System.out.println("Reclamação Nº " + atributos.getNumeroIdentificacao());
        System.out.println("Rua: ");
        atributos.setRua(s.next());
        System.out.println("Número da casa: ");
        atributos.setNumeroCasa(s.nextInt());
        System.out.println("Bairro: ");
        atributos.setBairro(s.next());
        System.out.println("Tamanho buraco (0 a 10): ");
        atributos.setTamanhoBuraco(s.nextInt());
        while(atributos.getTamanhoBuraco()<0 || atributos.getTamanhoBuraco()>10){
            System.out.println("Valor inválido, informe novamente: ");
            atributos.setTamanhoBuraco(s.nextInt());
        }
        System.out.println("Localização buraco (Calçada ou rua): ");
        atributos.setLocalizacaoBuraco(s.next());
        while(!atributos.getLocalizacaoBuraco().equalsIgnoreCase("rua") && !atributos.getLocalizacaoBuraco().equalsIgnoreCase("calçada")){
            System.out.println("Localização inválida, informe novamente: ");
            atributos.setLocalizacaoBuraco(s.next());
        }
        Atributos atributos = new Atributos();
        reclamacao.add(atributos);
    }

    public ArrayList<Atributos> getReclamacao() {
        return reclamacao;
    }

    public void setReclamacao(ArrayList<Atributos> reclamacao) {
        this.reclamacao = reclamacao;
    }

    public void excluirReclamacao() {
        if (reclamacao.isEmpty()) {
            System.out.println("Lista de reclamações vazia");
        } else {
            System.out.println("Reclamações disponíveis: ");
            for (int i = 0; i < reclamacao.size(); i++) {
                System.out.println("Nº " + atributos.getNumeroIdentificacao());
            }
            System.out.println("Número a ser excluído: ");
            int num = s.nextInt();
            while(num != atributos.getNumeroIdentificacao()) {
                System.out.println("Número inexistente, informe novamente: ");
                num = s.nextInt();
            }
            if (num == atributos.getNumeroIdentificacao()) {
                reclamacao.remove(atributos);
            }
            System.out.println("Registro excluído com sucesso");
        }
    }

    public void consultarReclamacao() {
        if (reclamacao.isEmpty()) {
            System.out.println("Lista de reclamações vazia");
        } else {
            System.out.println(atributos.toString());
        }
    }

    public void registraConserto() {
        System.out.println("Número da reclamação: ");
        int num = s.nextInt();
        if (num != atributos.getNumeroIdentificacao()) {
            System.out.println("Reclamação Inexistente");
        } else {
            System.out.println("Valor do conserto: ");
            double valorConserto = s.nextDouble();
        String data = "dd/MM/yyyy";
        String hora = "h:mm - a";
        String data1, hora1;
        java.util.Date agora = new java.util.Date();
        SimpleDateFormat formata = new SimpleDateFormat(data);
        data1 = formata.format(agora);
        formata = new SimpleDateFormat(hora);
        hora1 = formata.format(agora);
        System.out.println("Conserto realizado no dia "+data1 +" às " + hora1 +  "");
        System.out.println("Valor: R$"+valorConserto);
        }
    }
}

Main class where I call the method via switch case

package testelp2;

import java.util.Scanner;

public class Atendimento {

    public static void main(String[] args) {

        int opcao = 0;
        String res = null;
        Scanner s = new Scanner(System.in);
        Registro registro = new Registro();
        do {

            System.out.println("1) Registrar reclamação");
            System.out.println("2) Excluir reclamação");
            System.out.println("3) Consultar reclamação");
            System.out.println("4) Registrar conserto");
            opcao = s.nextInt();

            switch (opcao){
            case 1:
                registro.registraReclamacao();
                break;
            case 2:
                registro.excluirReclamacao();
                break;
            case 3:
                registro.consultarReclamacao();
                break;
            case 4:
                registro.registraConserto();
                break;
            }

            System.out.println("Deseja voltar ao Menu? S/N: ");
            res = s.next();
            while(!res.equalsIgnoreCase("s") && !res.equalsIgnoreCase("n")){
                System.out.println("Opção inválida, informe novamente: ");
                res = s.next();
            }
            if(res.equalsIgnoreCase("n")){
                System.out.println("A Secretaria de Obras agradece seu contato");
            }
        } while (res.equalsIgnoreCase("s"));

    }

}
    
asked by anonymous 19.09.2017 / 15:40

3 answers

-1

In the registraReclamacao method there is this line: Atributos atributos = new Atributos(); That is. Whenever you go through it, a new Attributes object will be created. For this reason, only the last record is stored.

I took it but it's still not saving, only saved the last

    
19.09.2017 / 15:57
2

You use the last object Atributos created within registraReclamacao() :

Atributos atributos = new Atributos();

public void registraReclamacao() {
    atributos.setNumeroIdentificacao(...

And just before adding to the list creates a new one:

...
Atributos atributos = new Atributos();
reclamacao.add(atributos);

Soon it will not add the one you just set up, but an empty one.

Enjoy and take Random , which should not be used as an identifier in any case because it can generate ids equal creating a problem in the system.

Switch By:

//Atributos atributos = new Atributos(); // não precisa desta linha aqui

//aqui guarda o numero da reclamação para não ter que fazer random que não lhe garante 
//que o numero da reclamação é único
int numReclamacao = 1; 

public void registraReclamacao() {
    Atributos atributos = new Atributos(); //quando vai registar cria um novo
    atributos.setNumeroIdentificacao(numReclamacao++); //aqui usa o numero da reclamacao

    System.out.println("Reclamação Nº " + atributos.getNumeroIdentificacao());

    ... //resto tudo igual

    //Atributos atributos = new Atributos(); //este também já não é preciso
    reclamacao.add(atributos);
}

There are many other logic errors / faults in the code, but I had to extend myself too much to cover them all.

    
20.09.2017 / 00:25
0

In method: registraReclamacao there is this line:

Atributos atributos = new Atributos();

That is. Whenever you go through it, a new Attributes object will be created. For this reason, only the last record is stored.

    
19.09.2017 / 15:51