Problema ao usar o Scanner

O problema é o seguinte. Quero guardar em uma String a entrada do Usuario. Consegui implementar bem, mas quando é usado um nome composto ex:Joao Sergio, ele só grava o Joao e alem disso dá um enter automático e insere o Sergio na proxima entrada que eh o cpf. O que fazer para corrigir esse bug?

public class Principal {

public static void main(String[] args) {
	
	Scanner entrada = new Scanner(System.in);
	Empresa empresa = new Empresa();
	
	System.out.println("Bem vindo ao cadastro de funcionários");
	System.out.println("-------------------------------------");
	System.out.println("");
	System.out.println("Quer cadastrar um novo funcionário? Digite sim ou não!");
	String resposta = entrada.next();
	
	while(resposta.equals("sim") || resposta.equals("Sim") || 
			resposta.equals("S") || resposta.equals("s")) {
		
		System.out.println("Digite o nome:");
		String nome = entrada.next();
		
		while (empresa.usuarioJaCadastrado(nome)){
			System.out.println("Nome do funcionario já existente. Digite outro nome:");
			nome = entrada.next();
		}
		
		System.out.println("Digite o cpf:");
		String cpf = entrada.next();
		System.out.println("Digite o salário:");
		int salario = entrada.nextInt();
		System.out.println("Digite o cargo:");
		String cargo = entrada.next();
	
		Funcionario funcionario = new Funcionario(nome, cpf, salario, cargo);
		
		empresa.get_listaFuncionarios().add(funcionario);
		
		System.out.println("Quer cadastrar um novo funcionário? Digite sim ou não!");
		resposta = entrada.next();
	}
	
	entrada.close();
	
	System.out.println("----------------------------------------");
	System.out.println("Lista dos novos funcionários cadastrados");
	System.out.println("----------------------------------------\n");
	
	for(Funcionario f: empresa.get_listaFuncionarios()){
		System.out.println("--------------------------");
		System.out.println("Informações do funcionário");
		System.out.println("--------------------------");
		System.out.println(f);
	}
	
}

}
`

Isso não é um problema, bug ou o que seja, é o comportamento normal do método next(). O correto é utilizar o método nextLine()

Então, eu tentei com o nextLine() também, só que ai nem dá pra escrever… ele pula direto a linha…

Preste bastante atenção ao teu código. Veja que você está lendo uma String, depois um int e novamente uma String. O problema está aí.
Quando você lê utilizando o método next(), o Scanner só lé a próxima palavra, ou seja, qualquer coisa até encontrar o \n ou um espaço. Caso você opte pelo nextLine(), terá a leitura de tudo o que está na linha, até encontrar o \n (enter ou quebra de linha).
Quando utiliza nextInt() e correlatos (nextFloat() por exemplo), o Scanner tenta ler o próximo valor que se refere ao tipo esperado, numérico ou não (existe um nextBoolean()), ignorando o \n.
Até aí, tudo bem, o problema é que, ao ler sequencialmente utilizando um nextInt() e um next() ou nextLine(), o Scanner não saberá diferenciar o \n que ficou de um \n de informação para encerrar o valor inserido e iniciar a leitura.
Logo, como resolver? Leia tudo como String com nextLine() e converta utilizando os wrappers.

Obrigado! só usei o nextLine() e converti a String em Int e deu tudo certo!