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:
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