Array com problema

Galera estou desenvolvendo um projeto em Java utilizando Arrays para fins didáticos e estou encontrando alguns problemas para guardar os valores. O projeto contém uma classe “Empresa”, uma “Funcionário” e uma de Teste.
Quando aparece no console ele pula um indice, mostrando os funcionarios a partir do indice “1” do array não mostrando o indice 0.

Segue o código:

        import java.util.Scanner;

   public class TestaEmpresa {
	public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);	
    //criando uma empresa
	Empresa empresa = new Empresa();
	System.out.println("Qual é o nome da sua empresa?");
	empresa.nome = sc.nextLine();
	
	System.out.println("Quantos funcionarios sua empresa possui?");
	empresa.qtdFuncionarios = sc.nextInt();
	
	empresa.empregados = new Funcionario[empresa.qtdFuncionarios];
	
	System.out.println("\nDigite o nome de seus funcionarios\n");
	
	for(int i = 0; i < empresa.empregados.length; i++) {
		Funcionario f = new Funcionario();
		System.out.println("Digite seu nome: ");
		f.nome = sc.nextLine();
		empresa.adicionaFuncionario(f);
	}
	
    System.out.println("\n\nFuncionarios da empresa "+ empresa.nome + ":");
	empresa.mostraEmpregados();
	empresa.mostraEmpregadosEnhanced();
	
	sc.close();
}


public class Empresa {
String nome;
String cnpj;
int qtdFuncionarios;
Funcionario [] empregados;

void adicionaFuncionario(Funcionario f) {
	for (int i = 0; i < this.empregados.length; i++) {
		if(this.empregados[i] == null) {
			this.empregados[i] = f;
			break;
		}
	}
}
	
void mostraEmpregados() {
	for(int i = 0; i < this.empregados.length; i++) {
		if(this.empregados[i] == null) {
			break;
		}
		System.out.println("Nome: "+ this.empregados[i].nome);
	}
	System.out.println("");
}

void mostraEmpregadosEnhanced() {
	for (Funcionario f : this.empregados) {
		if(f == null) {
			break;
		}
		System.out.println("Nome: "+ f.nome);
	}
	System.out.println("");
}
 }

    public class Funcionario {
String nome;
String departamento;
double salario;
Data dataEntrada;
String rg;
boolean estaNaEmpresa;
   }

Alguém pode me ajudar?

nextInt() não consome a quebra de linha, então quando ocorre um nextLine(), o nextLine() só consome a quebra de linha gerada ao pressionar o ENTER no nextInt().

Ou você só usa o nextLine() ou chama o nextLine() após o nextInt().

Inverti os dois e o problema continua, mas agora não aparece o nome da empresa.

 import java.util.Scanner;

 public class TestaEmpresa {
public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	
	//criando uma empresa
	Empresa empresa = new Empresa();
	
	System.out.println("Quantos funcionarios sua empresa possui?");
	empresa.qtdFuncionarios = sc.nextInt();
	
	System.out.println("Qual é o nome da sua empresa?");
	empresa.nome = sc.nextLine();
	
	empresa.empregados = new Funcionario[empresa.qtdFuncionarios];
	
	System.out.println("\nDigite o nome de seus funcionarios\n");
	
	for(int i = 0; i < empresa.empregados.length; i++) {
		Funcionario f = new Funcionario();
		System.out.println("Digite seu nome: ");
		f.nome = sc.nextLine();
		empresa.adicionaFuncionario(f);
	}
   System.out.println("\n\nFuncionarios daempresa "+ empresa.nome + ":");
	empresa.mostraEmpregados();
	
	sc.close();
 }
}

No console aparece isso, só que pula a parte de inserir o nome da empresa como marquei na imagem:

image

Conforme eu disse, ou você só usa o nextLine() ou chama o nextLine() após o nextInt().
Você não fez isso, você só inverteu a ordem de suas perguntas.

Veja:

System.out.println("Quantos funcionarios sua empresa possui?");
empresa.qtdFuncionarios = sc.nextInt(); // não vai consumir a quebra de linha do ENTER

System.out.println("Qual é o nome da sua empresa?");
empresa.nome = sc.nextLine(); // vai consumir a quebra de linha do ENTER pressionado ANTES e vai retornar vazio

Ou você faz assim:

System.out.println("Quantos funcionarios sua empresa possui?");
empresa.qtdFuncionarios = sc.nextInt(); // não vai consumir a quebra de linha do ENTER
sc.nextLine();  // consome a quebra de linha gerada

System.out.println("Qual é o nome da sua empresa?");
empresa.nome = sc.nextLine();

Ou faz assim:

System.out.println("Quantos funcionarios sua empresa possui?");
empresa.qtdFuncionarios = Integer.parseInt(sc.nextLine()); // só usa nextLine() e faz parsing quando necessário

System.out.println("Qual é o nome da sua empresa?");
empresa.nome = sc.nextLine();

Cara deu certo, muito obrigado! Entendi perfeitamente essa questão das quebras de linha.

1 curtida