Ir ao conteúdo

Posts recomendados

Postado

programa não lê e imprime string

package main;

import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        
        // variaveis do tipo inteiro
        byte num1; // variavel do tipo inteiro.           
        short num2;  // variavel do tipo inteiro maior que o tipo byte.
        int num3;  // variavel do tipo inteiro maior que o tipo byte e short.
        long num4;  // variavel do tipo inteiro maior que o tipo byte,short e int.
 
        // variaveis do tipo caractere.   
        char carac;
        String str;
        
        
        // variaveis do tipo real;
        float num5; // variavel do tipo real.  
        double num6; // variavel do tipo real maior que o tipo float.
        
        Scanner read = new Scanner(System.in);  //objeto para leitura do teclado.
        
        System.out.println("Digite  1 numero inteiro: ");
        num1 =  read.nextByte();
        
        System.out.println("Digite  2 numero inteiro: ");
        num2 =  read.nextShort();
        
        System.out.println("Digite  3 numero inteiro: ");
        num3 = read.nextInt();
        
        System.out.println("Digite  4 numero inteiro: ");
        num4 = read.nextLong();
        
        System.out.println("Digite um Caractere: ");
        carac = read.next().charAt(0);
        
        System.out.println("digite o 1 numero real: ");
        num5 = read.nextFloat();
        
        System.out.println("digite o 2 numero real: ");
        num6 = read.nextDouble();
        
        System.out.println("digite uma string: ");
        str = read.nextLine();
        
        System.out.println("o numero 1 e: "+ num1);
        System.out.println("o numero 2 e: "+ num2);
        System.out.println("o numero 3 e: "+ num3);
        System.out.println("o numero 4 e: "+ num4);
        System.out.println("o caractere digitado e: "+ carac);
        System.out.println("o numero 5 e: "+ num5);
        System.out.println("o numero 6 e: "+ num6);
        System.out.println("a string e: "+str);
        
        
        
        
        
        
        // System.out.println(num1);
        // System.out.println(num2);
        // System.out.println(num3);
        // System.out.println(num4);
        // System.out.println(carac);
        // System.out.println(num5);
        // System.out.printf("o numero e %.2f\n",num6);
        // System.out.format("o numero e %.2f\n",num5);
    }
}

 

Postado

Quando você lê apenas um número e não a linha inteira, o Enter que você dá acaba ficando no buffer de leitura, é só adicionar um nextLine antes de ler a String para eliminar esse Enter.

read.nextLine();
str = read.nextLine();

 

Postado

Como dito pelo @JorgeGus, isso é sujeira no buffer. Esse problema acontece quando você vai ler texto puro após ter lido um dado de tipo não textual.

 

Isso dá pau:

int i = scanner.nextInt();
String s = scanner.nextLine(); // Passa direto

 

Isso dá pau:

boolean i = scanner.nextBoolean();
String s = scanner.nextLine(); // Passa direto

 

Isso dá pau:

double i = scanner.nextDouble();
String s = scanner.nextLine(); // Passa direto

 

Esses abaixo funcionam, porque o lixo do buffer é ignorado automaticamente quando o Scanner vai ler um dado não textual.

 

Isso funciona:

int a = scanner.nextInt();
int b = scanner.nextInt(); // Ignora o lixo automaticamente

 

Isso funciona:

boolean a = scanner.nextBoolean();
int b = scanner.nextInt(); // Ignora o lixo automaticamente

 

É uma boa prática você limpar o buffer sempre após ler um dado não textual, apesar de ser desnecessário se a próxima leitura também for não textual, essa prática garante que seu código não vai quebrar se você mudar a ordem de leitura dos dados.

 

Assim:

int a = scanner.nextInt();
scanner.nextLine(); // Limpa o buffer

String b = scanner.nextLine(); // funciona como esperado
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...