O meu problema e o seguinte:
Eu solicito que insiram o nome do funcionario, mas quando rodo o programa o metodo le a String que digitei em outra saída system.out.
Isso é normal? Tem algum outro método que eu possa usar para receber uma string do teclado?
Segue meu código:
import java.util.Scanner;
public class Teste1
{
public static void main( String args[] )
{
Scanner input = new Scanner( System.in )
String funcionario;
int numFuncionario;
int horasTrabalhadas;
System.out.print( "Insira numero do funcionario: " );
numFuncionario = input.nextInt;
System.out.print( "Insira nome do Funcionario: " );
funcionario = input.nextLine();
System.out.print( "Insira numero de horas trabalhadas: " );
horasTrabalhadas = input.nextInt();
}
}
Quando rodo o programa o mesmo não libera para eu digitar o nome do funcionario, mas recupera a saida
"Insira numero de horas trabalhadas: " como se eu a tivesse digitado. Isso é o correto? Se houver algum outro método que eu possa usar me passem.
Eu cheguei a ler uma vez que seria por causxa do “entre”, mas não tenho certeza…
Será que alguém pode explicar isso?
Logo no começo quando não usava interface tive que colocar duas vezes o nextLine para ler uma string, em outras palavras tive que fazer uma gambiarra pra ler… =\
Eu já tinha esse problema com C, com buffer do teclado. Por isso migrei pra C++ e achei o cin.sync() lá que resolve o problema… mas em Java com Scanner nunca consegui resolver
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
teste2 Teste2 = new teste2();
System.out.println("Entre com o nome do funcionario: ");
String employerName = input.nextLine();
System.out.println("");
Teste2.displayMessage(employerName);
}
}
package test;
public class teste2 {
public void displayMessage( String employerName){
System.out.printf(“Nome do funcionario\n%s!\n”, employerName);
}
}
System.out.print( "Insira numero do funcionario: " );
numFuncionario = input.nextInt;
System.out.print( "Insira nome do Funcionario: " );
funcionario = input.nextLine();
System.out.print( "Insira numero de horas trabalhadas: " );
horasTrabalhadas = input.nextInt();
[/quote]
Tenta fazer assim:
System.out.println( "Insira numero do funcionario: " );
numFuncionario = input.nextInt;
System.out.println( "Insira nome do Funcionario: " );
funcionario = input.nextLine();
System.out.println( "Insira numero de horas trabalhadas: " );
horasTrabalhadas = input.nextInt();
É apenas para teste. Pode resolver ou não, mas eu já vi esse problema e em alguns casos isso resolveu. O nextLine() pegar os dados da linha em que o “cursor” do console está, usando um println você “limpa” a “linha atual” e faz com que o nextLine aguarde uma entrada do usuário. Não sei se o que estou falando faz sentido na teoria, mas na prática já vi resolver…
public class Empresa {
public static void main(String[] args){
String funcionario = "";
int numFuncionario = 0;
int horasTrabalhadas = 0;
Scanner input = new Scanner(System.in);
System.out.print("Inserir numero do funcionario: ");
numFuncionario = input.nextInt();
System.out.print("Inserir numero de horas trabalhadas: ");
horasTrabalhadas = input.nextInt();
System.out.print("Inserir nome do funcionario: ");
funcionario = input.next();
O seu erro foi não converter os valores.
O Scanner pega os dados como se fossem Strings…Se voce considerar isso para pegar um numeral tipo double, int, byte voce deveria usar uma conversao.
Ex:
Metodo Scanner para String = .nextLine();
Metodo para converter valores = Tipo.parseTipo(); ou Tipo.valueOf(argumento);
package teste;
import java.util.Scanner;
public class Teste {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String nome;
int identificador;
double numeroDeHorasTrabalhadas;
System.out.println("Digite o nome do trabalhador:");
nome = input.nextLine();
System.out.println("Digite o identificador:");
identificador = Integer.parseInt(input.nextLine());
System.out.println("Digite a quantidade de horas trabalhadas:");
numeroDeHorasTrabalhadas = Double.parseDouble(input.nextLine());
System.out.printf("Nome: %s\nIdentificador: %d\nHoras trabalhadas: %.2f", nome, identificador, numeroDeHorasTrabalhadas);
}
}