Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Construtor exige nome, mas aceita null...

Oi Pessoal!

Tenho uma classe Funcionario, e um construtor para ela, como mostrado abaixo:

class Funcionario{

    private String nome;
    // codigo omitido

        public Funcionario(String nome){
        this.nome = nome;
        this.identificador = ++codigo;
    }

E tenho também uma classe Empresa, cujo um dos atributos é um array de Funcionario:

class Empresa{

    //codigo omitido
    private Funcionario[] funcionarios;

Um dos métodos da classe Empresa é o de se adicionar funcionarios, como mostrado abaixo:

public void addFunc(){
        Scanner entrada = new Scanner(System.in);
        System.out.print("Numero de funcionarios a adicionar: ");
        numero = entrada.nextInt();
        this.funcionarios = new Funcionario[numero];

        for (int i = 0; i < this.funcionarios.length; i++){
        Scanner input = new Scanner(System.in);
        System.out.print ("Nome do Funcionario: ");
        String name = input.nextLine();
        this.funcionarios[i] = new Funcionario(name);
        //...
        }                
    }

Meu problema nesse método: se não for digitado nenhum nome (String name), ainda assim é criado um novo Funcionario, embora o construtor de Funcionario exija um nome. Alguém me ajuda?

Abraço!

2 respostas
solução!

Isso acontece porque você criou um construtor para a classe Funcionário que necessita de um parâmetro do tipo STRING, e no momento em que você instância essa classe no seu código você está passando um parâmetro do tipo String:

        String name = input.nextLine();
        this.funcionarios[i] = new Funcionario(name);

Caso você queira aceitar apenas uma String que contém caracteres, você pode alterar sua lógica para algo como:

int count = 0;
Scanner input = new Scanner(System.in);
while (count < this.funcionarios.length) {
        System.out.print ("Nome do Funcionario: ");
        String name = input.nextLine();
    if (name != null && !name.isEmpty()) {
        this.funcionarios[i] = new Funcionario(name);
        count ++;
    }
}

O sistema ira permanecer no loop do while até que todos os funcionários que precisam ser adicionados estejam com o nome preenchido conforme a regra implementada:

if (name != null && !name.isEmpty())

Uma observação, não é necessário instanciar toda vez o Scanner, basta instanciar o mesmo uma vez e utilizar toda vez que for necessário.

Boa tarde Wagner,

Creio que, no for do método addFunc(), você pode verificar o conteúdo da String nome:

public void addFunc(){
        Scanner entrada = new Scanner(System.in);
        System.out.print("Numero de funcionarios a adicionar: ");
        numero = entrada.nextInt();
        this.funcionarios = new Funcionario[numero];

        for (int i = 0; i < this.funcionarios.length; i++) {
                System.out.print ("Nome do Funcionario: ");
                String name = input.nextLine();
                if(name != null && !name.equals("") ) {
                        this.funcionarios[i] = new Funcionario(name);
                }
                //...
        }                
    }

Avisa aí se deu certo. Se não der, explique o que deu de erro.

Abraço.