Array overriding elements

Asked

Viewed 373 times

0

I did the method registraReclamacao() in that class and every time I call him on main, he 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 by 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"));

    }

}
  • 1

    Random?!?!? Don’t do this. Say what you want to do, this is really bad.

  • It was the teacher who asked to assign an Andom to each record...

  • 1

    So I won’t even touch it, it’s not a bad thing like that.

  • help ai brother kkkkk, only with the same array.

  • And Random is literally harder than assigning a sequential number.

  • Why vandalize your question?

Show 1 more comment

3 answers

2

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

Atributos atributos = new Atributos();

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

And just before adding to the list creates a new:

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

Soon will not add the one you just set up but rather a void.

Take the Random, that it should not be used as an identifier in any case as it may generate it ids creating a problem in the system.

Exchange for:

//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 errors/logic flaws in the code, but it was necessary to extend myself too much to cover them all.

0

In the method: registraReclamacaothere is that 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 did, but you still only save the last...

  • Took and placed in the global scope?

-1


In the method registraReclamacao there is that 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 still not saving you, only save the last

  • You used the answer area to add clarifications or ask a question. Instead, it is better to include this content in the question itself. To do this, just click on the [Edit] link, which is just below the question. Thus, the content is all gathered in one place, and those who arrive here need not be looking for information in various responses and comments to understand the problem.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.