Dúvida sobre array

16 respostas
javaarray
D

Galera, criei as classes PESSOA, ALUNO E PROFESSOR, ALUNO E PROFESSOR EXTENDEM A CLASSE PESSOA, A CLASSE PESSOA TEM O ATRIBUTO NOME QUE EU PASSO POR PARÂMETROS PELO CONSTRUTOR.
To tentando retornar valor do tipo String, mas da null. Certeza que eu esqueci algo, alguém sabe?

16 Respostas

R

Cara não cola imagem, fica ruim da gente copiar texto, ver o código etc…

Quanto ao problema, quando se cria um array, você não “popula” as posições, sendo um array de objetos, você cria o array usando new… e um new para cada posição…

Pessoa[] p1 = new Pessoa[10];

for (int i = 0; i < p1.length; i++) {
    p1[i] = new Pessoa("Nome " + (i + 1)); // ou new Aluno() ou new Professor()
    System.out.println(p1[i].nome);
}
D

Ta certo! Mas não deu certo…

Pessoa[] p1 = new Pessoa[10];
    
    for(int i=0;i<10;i++){
        p1[i] = new Pessoa("Nome: "+(i+1));
        System.out.println(p1[i].nome);
    }
R

Você deixou a classe Pessoa abstrata?

Eu coloquei new Pessoa como exemplo, mas nesse caso acho que você precisa usar new Aluno ou new Professor

Qual erro o netbeans acusa?

Clica na lampadazinha ao lado e posta o erro pra nós!

D

O seguinte erro, e não a classe n é abstrata mano

A

Vá na classe pessoa e crie o construtor.
O construtor padrão é public Pessoa(); //sem parâmetros, por isso o erro mostrado -> required no arguments

O construtor que você precisa na classe Pessoa é:

public Pessoa(String nome){//irá requerer argumentos, no caso uma string
    this.nome = nome;
}

Sugestão:

D

eu já fiz isso man. vou mandar todos os códigos, pera

D

A classe Pessoa:

package testepessoa;

public class Pessoa {

public String nome;

public void Pessoa(String nome){
    this.nome = nome;
}

//public String toString(){
    //return this.nome+"Aluno: Carlos /n"+this.nome+"Professor: Fernando ";
//}

}

A classe Aluno:

package testepessoa;

public class Aluno extends Pessoa{

}

A classe professor:

package testepessoa;

public class Professor extends Pessoa{

}

OBS: Eu as “</>” desse site não estão funcionando direito.

J

De acordo com a primeira imagem você tem um array de Pessoa. Mas só instanciar um array com new não significa que todas a posições tem um objeto.

Para cada posição você deve dar um new Pessoa().

D

Poderia fazer pra mim? To aprendendo pelo net, ta um pouco complicado

L

Aforma de se fazer é a que nosso colega falou acima:

Pessoa[] p1 = new Pessoa[10];

for (int i = 0; i < p1.length; i++) {

p1[i] = new Pessoa("Nome " + (i + 1)); // ou new Aluno() ou new Professor()

System.out.println(p1[i].nome);

}

So explicando alguns pontos: aparece null em seu codigo porque vc nao instanciou cada posição do array. Se vc tivesse instanciado cada posicao do array, nao ia aparecer null, mas tambem so iria aparecer o endereço que aquela variavel “p1” tem na memoria… ou seja, para funcionar voce precisa usar: p1[0].nome ou se tiver em um for… p1[i].nome

A

Dica:

O null é por que quando você declarou o vetor com x posições, cada posição passou a conter o valor null.
Como você estava percorrendo o vetor sem atribuir nenhuma pessoa, dava NullPointerException.

Como você já tem o construtor, agora é só repetir o que você fez antes na imagem abaixo, pois o erro deve ter sumido.
As vezes é necessário salvar a alteração realizada pois ai a IDE some com o erro.

Fiz uma variação onde você pode testar algumas coisas diferentes.
Obs.: a classe pessoa é muito genérica e deveria ser abstrata, mas neste caso preferi manter o status dela.
Veja:

import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;

public class Teste {

    public static void main(String[] args) {
        Random r = new Random();
        String[] nomes = {"Catarina", "Maria", "Ana","Almodova", "Senzarian","Karla","Andre"};
        Pessoa[] pessoas = new Pessoa[nomes.length];
        
        for (int i = 0; i < nomes.length; i++) {
            pessoas[i] = r.nextInt(4) == 2 ? new Professor(nomes[i]) : new Aluno(nomes[i]);
        }
        
        Arrays.stream(pessoas)
                //ordenando por nome e classe
                .sorted(Comparator.comparing(pessoa -> pessoa.getClass().getSimpleName()+pessoa.getNome()))
                .forEach(System.out::println);
    }
}

.

public class Pessoa {
    private String nome;

    public Pessoa(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }
    
    @Override
    public String toString() {
        return "Meu nome é: "+this.nome+".\nEu sou: "+this.getClass().getSimpleName()+"\n";
    }
    
}

.

public class Aluno extends Pessoa{
    
    public Aluno(String nome) {
        super(nome);
    }    
}

.

public class Professor extends Pessoa{
    
    public Professor(String nome) {
        super(nome);
    }
}
A

É muito complicado.
Procure fazer as coisas desde o básico.

Se estiver assistindo vídeos no youtube, assista desde a primeira aula.
No meu caso, ainda estou aprendendo, mas lembro de as vezes ter que assistir o mesmo vídeos 2,3,4, 5, sei lá quantas vezes para entender.

Não entendia e passava pro próximo conteúdo, depois com paciência voltava e via o que não havia entendido bem.

Bons estudos.

D

Obg pelas respostas galera, to assistindo mais vídeos aulas sobre array, me complico muito com o mesmo :smiley:

D

Juro que to tentando aprender, mas quando procuro array na net, as pessoas só mostram estruturada no próprio java e não por classes

D

Não to conseguindo :confused:

package testepessoa;

import java.util.Scanner;

public class TestePessoa {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    
    
    Pessoa[] pessoas = new Pessoa[3];
    String sala;
    
    for(int i=0;i<pessoas.length;i++){
        System.out.println("Informe os nomes: ");
        sala= input.next();
        pessoas[i] = new Pessoa(""); //Perguntar o que essa linha faz
        pessoas[i].setNome(sala); //Perguntar o que essa linha faz
    }
    
    for(int j=0;j<pessoas.length;j++){
        System.out.println("Nomes Inseridos: " + pessoas[j].getNome());
    }
    //
}

}
Fiz o 1° e o 2°, mas o 3° ta me confundindo muito, peço ajuda again

A
public class Teste {

    public static void main(String[] args) {   
        //inicializando o vetor conforme o item 3
        Pessoa[] pessoas = {new Aluno("Carlos"), new Professor("Fernando")};
        //Imprimindo o toString de cada objeto
        Arrays.stream(pessoas).forEach(System.out::println);
    }
}

O toString que usei foi este:

Criado 19 de agosto de 2017
Ultima resposta 20 de ago. de 2017
Respostas 16
Participantes 5