Usando o método nextLine() da classe Scanner

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.

Grato.

Use só o input.next(); ao invés de input.nextLine();

ve bem o teu construtor…de certeza k la ta o problema…pk a leitura(Scanner)) ta bem feita!!!

O Problema de usar so o next() é que não aceita o nome completo do funcionario somente o primeiro nome.

Existe algum outro método além dos next que aceitam como entrada strings?

O método next() captura até achar um espaço ou uma quebra de linha… o nextLine() que pega a string mesmo, até achar a quebra de linha

Até acrescentando aki, tinha eskecido… vc pode usar a classe “Console”, novo recurso do JDK 6.0

Só uma pequena dúvida, pq as vezes o nextLine não funciona?

É isso que eu quero enteder porque no código abaixo:

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: " ); horasTrab = input.nextInt();

eu deveria poder digitar o nome do funcionario, mas não me libera isso, só recupra a proxima string que digitei no 3 print…

alguém poderia me dizer porque?

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… =\

Funcionou mesmo esse negocio de dois nextLine(). Mas não seria o certo né?

Quem souber nos responder por favor ficamos no aguardo de uma explicação.

Abraços e muito obrigado a todos que me ajudaram.

Funcionou mesmo esse negocio de dois nextLine(). Mas não seria o certo né?

Quem souber nos responder por favor ficamos no aguardo de uma explicação.

Abraços e muito obrigado a todos que me ajudaram.

Claro que não seria o certo. Eu fiz isso só para poder testar o sistema que estava sem interface ainda.

Por causa desse problema nunca gostei de usar nextLine em java.

Estamos aguardando alguma explicação. :wink:

Tive os mesmos problemas.
Agora com o Java 6, tentem usar o Console. Eu nunca usei, mas numa dessa ele veio pra resolver esse problema do Scanner.

Meu problema:
http://www.guj.com.br/posts/list/77982.java

Dá uma lida no link que o Migore postou.
http://forum.java.sun.com/thread.jspa?threadID=718569&messageID=4148209

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

tenta assim…


package test;
import java.util.Scanner;

public class teste1 {

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);
}
}


[quote=jb]

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…

[code]
import java.util.Scanner;

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();

}
}[/code]

1 curtida

Legal. Gostei das idéias

Boa tarde galera,
Eu sou novo aqui no fórum mas acho que descobri uma solução bem fácil.
Eu estava tendo o mesmo problema com o nextLine().

Código:


public static void main(String[] args) {
System.out.println(“Digite o codigo a buscar”);
int codigo = key.nextInt();
System.out.println(“Digite o curso”);
String curso = CapturaNextLine();
}
private static String CapturaNextLine(){
Scanner key1 = new Scanner(System.in);
return key1.nextLine();
}

Resolve a situação não?

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);
    }
}

Esse programa ai roda direitinho. Pode testar ai!

Se quiser entender um pouco mais…