Problema com Scanner

5 respostas
Benvenuto

quando tento usar o método .nextLine(); do Scanner ele não para no prompt, simplismente passa direito.

import java.util.Scanner;

public class FaturaMain
{

	public static void main ( String args[] )
	{
		Fatura minhaFatura = new Fatura( "[telefone removido]", "Mouse Optico - Clone", 2, 35.25 );
		
		Scanner input = new Scanner( System.in );
				
		System.out.print( "Digite o numero do produto: " );
		String num = input.next();
		minhaFatura.setNumber( num );
		System.out.println();
		
		input.reset();
		System.out.print( "Digite a descricao do produto: " );
		String descri = input.nextLine();
		minhaFatura.setDescription( descri );
		System.out.println();
		
		input.reset();
		System.out.print( "Digite a quantidade do produto: " );
		int amou = input.nextInt();
		minhaFatura.setAmount( amou );
		System.out.println();
		
		input.reset();
		System.out.print( "Digite o preco do produto: " );
		double pric = input.nextDouble();
		minhaFatura.setPrice( pric );
		System.out.println();
		
		System.out.printf( "O valor da fatura e: %.2f", minhaFatura.getValorFatura() );
	}

}

qual a solução, sem criar um novo objeto Scanner? ja tentei usar o .reset(); mas não deu. So acontece isso com o método .nextLine();.

5 Respostas

alves.Felipe

Ola…

mas pq vc quer usar o nextLine…? o next(); vai funcionar para vc receber o valor da descrição…ele não vai passar direto…
e para fazer isso não precisa “limpar” o seu Scanner… e segunda a API não existe esse método “reset()”…

Benvenuto

seguinte, o .next() pega apenas até o proximo espaço, se no caso eu digitar duas palavras ele so pega a primeira ja no nextLine() ele pega tudo. O reset() foi colocado a partir da versão 1.6. Tem outra forma?

Benvenuto

resolvi o problema, o código ficou assim:

import java.util.Scanner;  
   
public class FaturaMain  
 {  
   
     public static void main ( String args[] )  
     {  
         Fatura minhaFatura = new Fatura( "[telefone removido]", "Mouse Optico - Clone", 2, 35.25 );  
           
         Scanner input = new Scanner( System.in );  
                   
         System.out.print( "Digite o numero do produto: " );  
         String num = input.next();  
         minhaFatura.setNumber( num );  
         System.out.println();  
           
         input.nextLine();
         System.out.print( "Digite a descricao do produto: " );  
         String descri = input.nextLine();  
         minhaFatura.setDescription( descri );  
         System.out.println();  
           
         System.out.print( "Digite a quantidade do produto: " );  
         int amou = input.nextInt();  
         minhaFatura.setAmount( amou );  
         System.out.println();  
           
         System.out.print( "Digite o preco do produto: " );  
         double pric = input.nextDouble();  
         minhaFatura.setPrice( pric );  
         System.out.println();  
           
         System.out.printf( "O valor da fatura e: %.2f", minhaFatura.getValorFatura() );  
     }  
   
}
alves.Felipe

po cara, foi mal.. eu vi na API da 1.5..

mas então.. fiz alguns testes aqui.. e percebi se o seu 1º next for nextInt ou nextDouble.. e o próximo for nextLine()... vai passar direto mesmo.. mas se o 1º for um next() ou nextLine mesmo, ele vai funcionar correto.. Entendeu?? mas não sei pq ... assim funciona:
System.out.print( "Digite o numero do produto: " );   
		        String num = input.nextLine();   
		        System.out.println(num);   
		           
		        System.out.print( "Digite a descricao do produto: " );   
		        String descri = input.nextLine();   
		        System.out.println(descri);   
		        
		        System.out.print( "Digite a descricao do produto: " );   
		        String descri1 = input.nextLine();   
		        System.out.println(descri1);
e assim o 1º nextLine pula..e já no segundo fica certo esperando a entrada:
System.out.print( "Digite o numero: " );   
		        int num1 = input.nextInt();   
		        System.out.println(num1);
	        
	      
		        System.out.print( "Digite o numero do produto: " );   
		        String num = input.nextLine();   
		        System.out.println(num);   
		           
		        System.out.print( "Digite a descricao do produto: " );   
		        String descri = input.nextLine();   
		        System.out.println(descri);   
		        
		        System.out.print( "Digite a descricao do produto: " );   
		        String descri1 = input.nextLine();   
		        System.out.println(descri1);
abraco
Benvenuto

ja resolvi sem essa gambiarra hehehe, ta la em cima a resolução :stuck_out_tongue_winking_eye:

valeu mesmo assim Felipe!

Abraço!

[]'s.

Criado 16 de maio de 2008
Ultima resposta 16 de mai. de 2008
Respostas 5
Participantes 2