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?
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);
}
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);
}
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!
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:
eu já fiz isso man. vou mandar todos os códigos, pera
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.
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().
Poderia fazer pra mim? To aprendendo pelo net, ta um pouco complicado
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
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);
}
}
É 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.
Obg pelas respostas galera, to assistindo mais vídeos aulas sobre array, me complico muito com o mesmo
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
Não to conseguindo
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
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: