Array

3 respostas
I

E ae Pessoal
Tenho uma classe Processos, onde instancio um vetor desta classe, e uma variável chamada temporário.

public Processos[] entra_dados(){ Processos[] dados = new Processos[10]; Processos temporario = new Processos(); System.out.println("Entre com os dados dos processos\n" + "Quantos processos deseja? "); Scanner input = new Scanner(System.in); int nprocessos = input.nextInt(); for (int i= 0; i< nprocessos; i++){ System.out.println("\n\t\tDigite os dados para o "+(i+1)+"º processo:"); System.out.println("Digite o nome do processo: "); temporario.setNome(input.next()); System.out.println("Qual o período do processo?"); temporario.setPeriodo(input.nextInt()); System.out.println("Informe o tempo de CPU para este processo: "); temporario.setTempocpu(input.nextInt()); temporario.setQuadroseg(1000/temporario.getPeriodo()); System.out.println("Quadros/segundo: "+temporario.getQuadroseg()); dados[i] = temporario; } return dados; }

Mas quando armazendo tudo em temporário e faço dados[i] = temporario, o vetor todo fica somente com os últimos dados que inseri. Por exemplo, se eu estiver armazenado dados na posição 0 do vetor, e depois tentar armazer dados na posição 1, todo o meu vetor ficará com os últimos dados que inseri, tanto a posição 0 quanto a posição 1. Já sei por que isso acontece, porque quando faço essa atribuição é pego a referência do objeto e não o valor nele contido.
Mas o que devo fazer para conseguir armazenar os dados no vetor?

3 Respostas

thiago.correa

Tente isso:

public Processos[] entra_dados(){ Processos[] dados; Processos temporario = new Processos(); System.out.println("Entre com os dados dos processos\n" + "Quantos processos deseja? "); Scanner input = new Scanner(System.in); int nprocessos = input.nextInt(); dados = new Processos[nprocessos]; for (int i= 0; i< nprocessos; i++){ System.out.println("\n\t\tDigite os dados para o "+(i+1)+"º processo:"); System.out.println("Digite o nome do processo: "); temporario.setNome(input.next()); System.out.println("Qual o período do processo?"); temporario.setPeriodo(input.nextInt()); System.out.println("Informe o tempo de CPU para este processo: "); temporario.setTempocpu(input.nextInt()); temporario.setQuadroseg(1000/temporario.getPeriodo()); System.out.println("Quadros/segundo: "+temporario.getQuadroseg()); dados[i] = temporario; } return dados; }

diego2005

O problema é que todos os objetos de seu array estão referênciando o objeto temporário criado fora do loop. Instancie ele dentro do loop:

public Processos[] entra_dados(){ Processos[] dados = new Processos[10]; Processos temporario = null; System.out.println("Entre com os dados dos processos\n" + "Quantos processos deseja? "); Scanner input = new Scanner(System.in); int nprocessos = input.nextInt(); for (int i= 0; i< nprocessos; i++){ temporario = new Processos(); System.out.println("\n\t\tDigite os dados para o "+(i+1)+"º processo:"); System.out.println("Digite o nome do processo: "); temporario.setNome(input.next()); System.out.println("Qual o período do processo?"); temporario.setPeriodo(input.nextInt()); System.out.println("Informe o tempo de CPU para este processo: "); temporario.setTempocpu(input.nextInt()); temporario.setQuadroseg(1000/temporario.getPeriodo()); System.out.println("Quadros/segundo: "+temporario.getQuadroseg()); dados[i] = temporario; } return dados; }

Tenta ai, qualquer coisa posta de novo…T+

I

Ae galera valeu mesmo pelas respostas, vou tentar por aki.
Grande abraço!

Criado 22 de setembro de 2006
Ultima resposta 22 de set. de 2006
Respostas 3
Participantes 3