Dúvida sobre exercício de Java - Criado novo funcionário(Arrays)

7 respostas Resolvido
java
D

Fala pessoal, tudo certo?

Estou um pouco enrolado nos exercícios de Arrays, eu aprendi como criar Arrays e como percorre-las com um laço “for”. Possuo um pequeno código com apenas 3 classes, são elas: Funcionario, Empresa e TestaEmpresa. Dentro da classe Empresa eu criei um método para percorrer a variável empregados da Array Funcionario[], para verificar se o espaço onde o novo funcionário que será adicionado já está em uso, se estiver ele encontra o próximo espaço vazio.

Segue código:

public class Empresa {
    
    String nomeEmpresa;
    
    Funcionario[] empregados;
        
    void adiciona(Funcionario funcionario) {
        
        for(int i = 0; i <= this.empregados.length; i++) {
            
            if(this.empregados[i] == null) {
                this.empregados[i] = funcionario;
            } else {
                continue;
            }
            
        }
        
    }

}
public class Funcionario {

    String nomeFuncionario;

}
public class TestaEmpresa {
    
    public static void main(String[] args) {
        
        Empresa empresa = new Empresa();
        
        empresa.empregados = new Funcionario[10];
        
        // ... O que eu faço aqui? T_T
    
    }

}

O código está compilando sem erros, mas é ai que vem a minha pergunta: Como que eu faço para adicionar um funcionário na Classe TestaEmpresa? Usando o método que criei para verificar se o espaço está disponível?

Eu estou meio perdido nessa questão, por que entrou Array na lógica. Se fosse sem Array eu criaria um novo funcionário dessa forma;

Funcionario novo = Funcionario();

novo.nomeFuncionario = "Diego Souza";

Eu consigo também criar um funcionário com Array:

Funcionario novo = new Funcionario();
Funcionario[] func = new Funcionario[5];
 
novo.func.nomeFuncionario[0] = "Diego Souza";

Agora que entra o X da questão: Como eu vou usar meu método adiciona()?

Desculpem se escrevi muito, tentei expor da melhor forma possível a minha questão :smiley:

7 Respostas

D

Olá

Acho que faltou um “return” no “adiciona” da classe “Empresa”, caso contrário, todo o array será preenchido com o mesmo “funcionario”:

if(this.empregados[i] == null) {
    this.empregados[i] = funcionario;
    return;
} else {

O “<=” no loop for no “adiciona” da classe “Empresa” também está errado.


Para adicionar “funcionario” na classe “TestaEmpresa”

// cria funcionario
Funcionario novo = new Funcionario(); // faltou o new
novo.nomeFuncionario = "Diego Souza";

// adiciona na empresa
empresa.adiciona(novo);

e aqui está errado

Funcionario novo = new Funcionario();
Funcionario[] func = new Funcionario[5];
 
novo.func.nomeFuncionario[0] = "Diego Souza";

seria

Funcionario novo = new Funcionario();
Funcionario[] func = new Funcionario[5];
func[0] = novo; // adiciona "novo" no "func[0]"

func[0].nomeFuncionario = "Diego Souza";
// ou
// novo.nomeFuncionario = "Diego Souza";
// pois "novo" é igual a "func[0]"
D

Esses últimos exemplos foi eu mesmo que esqueci de digitar, mas no código eu sempre coloco certo. Mas ainda não é o ponto da minha dúvida, vou resumir agora que melhorei um pouco meu código.

Resumo: Criar um código que adiciona um novo Aluno e sua respectiva Nota numa Array, sendo que o programa(método) deve reconhecer automaticamente um local vazio(null) na Array para poder criar o novo objeto.

//Trabalhando com Arrays, encapsulamento, bibliotecas e métodos.

package com.escola;

import java.util.Scanner;

public class TesteDaTurma {

    public static void main(String[] args) {
        
        int num;
    
        Turma turma = new Turma();
        turma.aluno = new Aluno[5];
        
        System.out.println("Deseja cadastrar um aluno? (1-SIM / 2-NÃO)");
        Scanner input = new Scanner(System.in);
        num = input.nextInt();
        
        if(1 == num) {
        
            turma.adicionaAluno();
            turma.imprimeNotas();
            
        } else {
            System.out.println("Obrigado por usar o programa!");
        }

    }

}
package com.escola;

import java.util.Scanner;

public class Turma {

        Aluno[] aluno;
        
    void imprimeNotas() {
        for(int x = 0 ; x < this.aluno.length ; x++) {
            Aluno aluno = this.aluno[x];
            if(aluno == null) continue;
            System.out.println("Aluno: " + aluno.getNome());
            System.out.println("Nota: " + aluno.getNota());
            System.out.println("--");
        }
    }
    
    void adicionaAluno() {
            
            String nome;
            double nota;
            
            System.out.println("Informe o nome do primeiro aluno: ");
            Scanner user = new Scanner(System.in);
            nome = user.nextLine();
            
        for(int i=0; i < this.aluno.length; i++) {
            if(this.aluno == null) {
                this.aluno[i] = new Aluno();
                this.aluno[i].setNome(nome);
                
                System.out.println("Agora digite a nota deste Aluno: ");
                nota = user.nextDouble();
                
                this.aluno[i].setNota(nota);
            }
                        
        }    
        
    }
        
}
package com.escola;

public class Aluno {

    String nome;
    double nota;

    public String getNome() {
        return nome;
    }

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

    public double getNota() {
        return nota;
    }

    public void setNota(double nota) {
        this.nota = nota;
    } 

}

Eu fiz da maneira correta? Meu código compila e consigo adicionar o nome do primeiro aluno, dai em diante o código não continua, ele “breka”.

J
Veja bem seus Ifs. Aqui por ex:

if(this.aluno == null) {

this.aluno[i] = new Aluno();



Na primeira execução o If verifica se  foi criado algum objeto Aluno. Como não foi criado, ainda está vazio, cria-se o objeto.  vem a segunda execução, ele verifica que  foi criado o objeto, não é igual a null, então o bloco {  } não é executado
D

Jonas obrigado pela resposta.

Eu dei uma melhorada no meu método, eu consigo criar o primeiro usuário normalmente, adicionando o seu nome e nota. Porém ele não continua a execução.

Teria como eu dar um “break/continue” para ele sair fora do laço for? Criei o laço for somente para chegar um espaço livre na Array, não preciso criar todos usuários de uma vez, isso ficaria para estudar após aprender a criar o primeiro.

Criando apenas um Aluno e exibindo os seus detalhes já é o meu primeiro avanço :smiley:

void adicionaAluno() {
        
            String nome;
            double nota;
            
            System.out.println("Informe o nome do primeiro aluno: ");
            Scanner user = new Scanner(System.in);
            nome = user.nextLine();
            
            System.out.println("Agora digite a nota deste Aluno: ");
            nota = user.nextDouble();
            
        for(int i=0; i < this.aluno.length; i++) {
            
            if(this.aluno == null) {
                this.aluno[i] = new Aluno();
                this.aluno[i].setNome(nome);
                this.aluno[i].setNota(nota);
                
            } 
                        
        }    
        
    }

Ps: alterei o objetivo da Empresa(Funcionário) para Escola(Aluno), mas é a mesma questão.

D

Fiz alguns testes aqui, agora ele fecha o laço quando vai para segunda tentativa, já que o OR vai ver que a variável “i” já não é mais null.

if(this.aluno == null || this.aluno != null) { //... Adicionei um OR

Mais isso não parece ser a maneira correta. :sweat_smile:
To chegando perto.

J
Solucao aceita

Não é mesmo a maneira correta. Esse if vai ser executado de qualquer forma, porque sempre o objeto pode estar nulo ou não nulo, seria muito desnecessario esse teste.

O que acha de uma coisa mais organizada? E você ja vai aprendendo tambem um pouco sobre como ir modelando o sistema melhor.

Vai precisar criar tres pacotes.
O primeiro, dê o nome bancoDeDados.
Neste var ter a classe Banco, responsavel por simular um banco de dados

O segundo pacote dê o nome de modelo.
Neste vai ter as classes modelo, Funcionario e Empresa, seus atributos e metodos gets e sets

E o terceiro pacote, dê o nome visao.
Neste vai ter uma classe de controle, ControleFuncionario, e outra, com o metodo main, ExeEmpresa

pacote bancoDeDados…

package bancoDeDados;

import modelo.Funcionario;

public class Banco {

public static Funcionario[] listaFuncionario;

private static int posFuncionario;
public static boolean cadastrar(Funcionario dados){
    if ( listaFuncionario == null ) {
        listaFuncionario = new Funcionario[5];
    }
    listaFuncionario[ posFuncionario ] = dados;
    posFuncionario++;
    return true;
    
} 

public static Funcionario[] lista() {
    return listaFuncionario;
}

 public static void exclui() {
    listaFuncionario = null;
}

}

pacote modelo…

package modelo;

public class Empresa {
private String nome;

public String getNome() {
    return nome;
}

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

}

package modelo;

public class Funcionario  {

private String nome;

private String telefone;

private Empresa empresa;
public Funcionario(Empresa empresa) {
   this.empresa = empresa; 
   this.empresa.setNome("GUJ Tecnologies");
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String getNome() {
    return nome;
}

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

public Empresa getEmpresa() {
    return empresa;
}

public void setEmpresa(Empresa empresa) {
    this.empresa = empresa;
}



@Override
public String toString() {
    return "\n-----Funcionario----- \n" +
            "Empresa: " + empresa.getNome()+ "\n"+
            "Nome: " + nome + "\n "+
            "Telefone: " + telefone+"\n------ ";
}

}

pacote visao…

package visao;

import bancoDeDados.Banco;

import java.util.Arrays;

import javax.swing.JOptionPane;

import modelo.Empresa;

import modelo.Funcionario;

public class ControleFuncionario {

public static void inserir() {  
    Empresa empresa = new Empresa();
    Funcionario func = new Funcionario(empresa);   
    func.setNome( JOptionPane.showInputDialog("Informe o nome") );
    func.setTelefone( JOptionPane.showInputDialog("Informe o telefone") );
    if ( Banco.cadastrar( func ) )
        JOptionPane.showMessageDialog(null, "Funcionario inserido com sucesso!");
    else
        JOptionPane.showMessageDialog(null, "Erro ao inserir Funcinonario!");

}

public static void lista() {
    Funcionario[] lista;
    lista = Banco.listaFuncionario; 
    if (lista == null) {
         JOptionPane.showMessageDialog(null, "Não há funcionario inserido!");
    } else {
    System.out.println(Arrays.toString(Banco.lista())); }
}
 
public static void exclui() {
    Banco.exclui();
    JOptionPane.showMessageDialog(null,"Funcionarios excluidos!");

}

}

package visao;

import java.awt.HeadlessException;
import javax.swing.JOptionPane;

public class ExeEmpresa {

public static void main(String[] args) {
    byte opcao = 0;
    String menu = "Menu\n" +
            "1 - Inserir\n" +
            "2 - Listar\n" +
            "3 - Excluir\n" +
            "4 - Alterar\n" +
            "5 - Sair";
    do {
        try {
            opcao = Byte.parseByte(JOptionPane.showInputDialog(menu));
        }
        catch(HeadlessException | NumberFormatException e) {
            JOptionPane.showMessageDialog(null, "Opção inválida!"); continue;
        }
        switch( opcao )
        {
            case 1: ControleFuncionario.inserir(); break;
            case 2: ControleFuncionario.lista(); break;
            case 3: ControleFuncionario.exclui(); break;
            case 4: JOptionPane.showMessageDialog(null, "Crie o codigo para alterar"); break;
            case 5: System.out.println("Ate mais"); System.exit(0);
            default: JOptionPane.showMessageDialog(null, "Opção inválida!"); break;
        }
    } while( opcao != 5 );
}

}

D

Show de bola Jonas, eu ainda estou para entrar nessa parte de MVC, pacote DAO, JDBC. É bastante interessante, eu vou deixar salvo aqui para colocar isso no meu código e exercitar esses conceitos, que para mim serão novos aprendizados.

Obrigado (y)

Criado 28 de maio de 2016
Ultima resposta 29 de mai. de 2016
Respostas 7
Participantes 3