[RESOLVIDO] - Vetor em Classes

9 respostas
M
import java.util.Scanner;

public class DadosFunc{
	Scanner entrada = new Scanner(System.in);
	Funcionario obj = new Funcionario();
	
	public void entradaDados(){
		System.out.println("Informe o nome do funcionário:");
		obj.setNomeFunc(entrada.next());
		System.out.println("Informe o numero de cadastro:");
        obj.setNumero(entrada.nextInt());
		System.out.println("Informe o salário do funcionário:");
        obj.setSalario(entrada.nextDouble());
	}

}
public class Funcionario{
	private String nomeFunc;
	private double salario;
	private int numero;
	
	public String getNomeFun(){
		return nomeFunc;
	}
	public void setNomeFunc(String nomeFunc){
		this.nomeFunc=nomeFunc;
	}
	public double getSalario(){
		return salario;
	}
	public void setSalario(double salario){
		if(salario<0){
			System.out.println("Salario invalido!");
		}else{
			this.salario=salario;
		}
		
	}
	
	public int getNumero(){
		return numero;
	} 
	public void setNumero(int numero){
		this.numero=numero;
		
	}	
}
import java.util.Scanner;

public class Empresa{
	public static void main(String[]args){
		Scanner entrada = new Scanner(System.in);
		DadosFunc obj[] = new DadosFunc[10]; //isso esta certo?
		int resposta = 1;
		int i=0;
		
		
    	while(resposta==1 || resposta==1){
    	System.out.println("*****************************************");
		System.out.println("*1-Cadastrar Funcionario                *");
    	System.out.println("*2-Imprimir media de salarios           *");
	    System.out.println("*3-Mostrar salario do funcionario       *");
    	System.out.println("*4-Mostrar a quantidade de funcionario  *");
    	System.out.println("*****************************************");
    	System.out.println("Qual sua opção: ");
    	int opcao = entrada.nextInt();
    		if(opcao==1){
    			System.out.println("Cadastro do Funcionário "+i);
    			obj[i].entradaDados(); // o erro aparece aki (Exception in thread "main" java.lang.NullPointerException)...
    		}
    		do{
    		System.out.println("Deseja voltar ao menu? (1-Sim/2-Não");
    		resposta = entrada.nextInt();
    	    	if(resposta>2 || resposta<=0){
    			   System.out.println("Opcao invalida!");
    	    	}
    		}while(resposta>2 || resposta<=0);
    		
    	}
    	}
	    
	}

como faço para instanciar classes usandpo vetor para que o mesmo deixe armazenados as informações do funcionario para depois eu pegar essas informaçoes do funcionario que eu quiser para mostrar na tela??

alguem tem algum exemplo bem mamãocom açucar?

analisem meu codigo e vejam o erro que esta dando

9 Respostas

nel

Boa tarde.

Você pode criar um vetor (List, Collection) contendo a classe funcionarios, com seus respectivos getters e setters, mas um vetor contendo uma classe que invoca um método, qual o sentindo disso?

Basta fazer:

List<Funcionario> list = new ArrayList<Funcionario>();
//se quiser vários, inicie o laço de repetição aqui
Funcionario func = new Funcionario();

func.setNomeFunc("Eu");
func.setNumero(2);

list.add(func);
//termine o laço de repetição aqui

//no seu main
DadosFunc dados = new DadosFunc();
dados.entradaDados();

O erro que acontecia é que você instanciou um objeto da forma errada, e como não há referência ocorre o NullPointer.

Abraços

M
import java.util.Scanner;

public class Aluno{
	public static void main(String[]args){
		Scanner entrada = new Scanner(System.in);
		double nota[] = new double[5];
		double maior[] = new double[5];
		double menor[] = new double[5];
		String nome[] = new String[5];
		int i;
		
		for( i=0; i<=5 ; i++){
		
		System.out.println("Aluno "+(i+1)+" - Informe seu nome: ");
		nome[i] = entrada.next();
		System.out.println("Informe sua nota: ");
		nota[i] = entrada.nextDouble();
		
		
		if(i==0){
			maior[i]=nota[i];
			menor[i]=nota[i];
			
		}
		if(	maior[i]<nota[i]){
			maior[i]=nota[i];
		}
		if(	menor[i]>nota[i]){
			menor[i]=nota[i];
		}
		}
		System.out.println("Maior nota: "+maior[i]);
		System.out.println("Menor nota: "+menor[i]);
		
		
	}
}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Aluno.main(Aluno.java:15)

como resolvo isso?

sergiotaborda
public class Empresa{
	public static void main(String[]args){
		Scanner entrada = new Scanner(System.in);
		DadosFunc obj[] = new DadosFunc[10]; //isso esta certo?
		int resposta = 1;
		int i=0;
		
		
    	while(resposta==1 || resposta==1){
    	System.out.println("*****************************************");
		System.out.println("*1-Cadastrar Funcionario                *");
    	System.out.println("*2-Imprimir media de salarios           *");
	    System.out.println("*3-Mostrar salario do funcionario       *");
    	System.out.println("*4-Mostrar a quantidade de funcionario  *");
    	System.out.println("*****************************************");
    	System.out.println("Qual sua opção: ");
    	int opcao = entrada.nextInt();
    		if(opcao==1){
    			System.out.println("Cadastro do Funcionário "+i);
                         obj[i] = new DadosFunc(); // correção 
    			obj[i].entradaDados();
    		}
    		do{
    		System.out.println("Deseja voltar ao menu? (1-Sim/2-Não");
    		resposta = entrada.nextInt();
    	    	if(resposta>2 || resposta<=0){
    			   System.out.println("Opcao invalida!");
    	    	}
    		}while(resposta>2 || resposta<=0);
    		
    	}
    	}
	    
	}

veja a correção.

DadosFunc [] dados = new DadosFunc[10]; cria o array,não os objetos dentro dele. Por isso vc precisa criar um objeto e atribui-lo à posição do array.

nel

É bem simples, você fez no for <=5 e iniciando o i em 0, o que isso quer dizer?
Simples amigo, ele vai repetir o laço 6 vezes, certo? 0-1-2-3-4-5 …sendo que o tamanho do objeto nome é [5].

Coloque no for apenas < 5

Abraços. :slight_smile:

P.s: esse erro ocorre quando tentamos acessar uma posição do vetor que é maior que o seu tamanho máximo, ou seja, vetor é de 5 posições e está tentando acessar uma 6ª posição.

sergiotaborda

[quote=michelato

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 5
at Aluno.main(Aluno.java:15)

como resolvo isso?[/quote]

seu codigo está iterando enquanto i<=5, mas o seu array tem 5 posições (0,1,2,3,4) Não existe posição 5. é isso que a exceção lhe está dizendo : “O indice do array está fora dos limites (bounds)”

tire o = e faça apenas i < 5

M
import java.util.Scanner;

public class Aluno{
	public static void main(String[]args){
		Scanner entrada = new Scanner(System.in);
		double nota[] = new double[5];
		double maior[] = new double[5];
		double menor[] = new double[5];
		String nome[] = new String[5];
		int i;
		
		for( i=0; i<5 ; i++){
		
		System.out.println("Aluno "+(i+1)+" - Informe seu nome: ");
		nome[i] = entrada.next();
		System.out.println("Informe sua nota: ");
		nota[i] = entrada.nextDouble();
		
		
		if(i==0){
			maior[i]=nota[i];
			menor[i]=nota[i];
			
		}
		if(	maior[i]<nota[i]){
			maior[i]=nota[i];
		}
		if(	menor[i]>nota[i]){
			menor[i]=nota[i];
		}
		}
		System.out.println("Maior nota: "+maior[i]);
		System.out.println("Menor nota: "+menor[i]);
		
		
	}
}

ainda deu erro! x(

nel

Olá.

Sua lógica está meio confusa mas não vou me atrelar a isso. Sobre o erro, provavél causa é devido ao seus System.out.println();

Faça assim:

System.out.println("Maior nota: "+maior[i-1]); System.out.println("Menor nota: "+menor[i-1]);

Apesar de o for ter sido encerrado, o i foi incrementado e a no System.out.println() ele tentava buscar a sexta posição, o que é inexistente.

Abraços :slight_smile:

M

valew

nel

Resolvido? :slight_smile:

Se sim poste [Resolvido] ao lado do seu tópico ok?
Abraçoss!

Criado 27 de outubro de 2009
Ultima resposta 28 de out. de 2009
Respostas 9
Participantes 3