• 0
Sign in to follow this  
startour

Erro no Código

Question

alguém pode me ajudar, tem um erro nesse código e não sei qual é 

package exerciciovetor2b;

import java.util.Scanner;

public class ExercicioVetor2B {

      public static void main(String[] args) {
        
          Scanner entrada = new Scanner(System.in);
          Produto [] cadastro = new Produto[5];
          Produto aux_produto = new Produto();
          
          //carregando o vetor cadastro
          for(int i=0; i<= 4; i++){
              System.out.print("Digite o codigo do produto......: ");
              aux_produto.codigo = entrada.nextInt();
              System.out.print("Digite a descrição do produto...: ");
              aux_produto.descricao = entrada.next();
              System.out.print("Digite o valor do produto.......: ");
              aux_produto.valor = entrada.nextFloat();
              cadastro[i] = aux_produto;
          }
          
          // exibindo o vetor cadastro
          for(int i=0; i<= 4; i++){
              System.out.println("Código ......: " + cadastro[i].codigo);
              System.out.println("Descrição ...: " + cadastro[i].descricao);
              System.out.println("Valor (R$)...: " + cadastro[i].valor);
            
          }
    }
}

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0
Guest

Olá, @startour Seu post é foi criado em maio e sinto muito em não ter recebido uma resposta

Porém, achei interessante falar d uma questão referente ao que está acontecendo e q, provavelmente, seja uma das causas do erro em seu código (Sendo sincero parece q estou falando sozinho aqui já q o tópico foi criado em maio rs...) 

A questão q gostaria de frisar, para quem tiver interesse de aprender sobre esse assunto diz respeito a sujeira no buffer. Acredito q p muitos que estudam ou mesmo trabalham com Java isso seja algo até então um assunto desconhecido, e até acho isso normal, pois comigo mesmo foi assim, ou seja, durante o tempo q estudei Java, não aprendi a respeito desse assunto 

Ao usar o Scanner do modo como está sendo feito no código do @startour inevitavelmente vai dar erro, ou seja, não vai ser possível fazer tantas leituras do teclado sem q sujeira no buffer interfira nessas leituras e provoque erro. A classe Scanner, do modo como está sendo usada no código acima até pode funcionar em códigos onde são feitas poucas leituras do teclado, mas no caso acima não funciona

Uma maneira de lidar com esse problema em Java (sujeira no buffer) é criar métodos próprios para fazer a leitura do teclado de um valor inteiro, de uma String, de um valor de ponto flutuante (float ou double), etc... de maneira adequada

Segue como ficaria o código já com os métodos q aprendi a criar para resolver o exercício:

Classe Produto:


public class Produto {

    private int codigo;
    private String descricao;
    private double valor;

    public Produto(int codigo, String descricao, double valor) {
        this.codigo = codigo;
        this.descricao = descricao;
        this.valor = valor;
    }

    public int getCodigo() {
        return codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public double getValor() {
        return valor;
    }
}

Classe principal, com o método main:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Aplicacao {

    private static final int QTDE = 5;

    public static void main(String[] args) {

        Produto[] produtos = new Produto[QTDE];
        int codigo;
        String descricao;
        double valor;

        for (int i = 0; i < produtos.length; i++) {
            System.out.print("Digite o codigo do produto " + (i + 1) + "....: ");
            codigo = readInt();
            System.out.print("Digite a descrição do produto...: ");
            descricao = readString();
            System.out.print("Digite o valor do produto.......: ");
            valor = readDouble();

            produtos[i] = new Produto(codigo, descricao, valor);
        }

        System.out.println();

        for (int i = 0; i < produtos.length; i++) {
            System.out.println("Código ......: " + produtos[i].getCodigo());
            System.out.println("Descrição ...: " + produtos[i].getDescricao());
            System.out.println("Valor (R$)...: " + produtos[i].getValor());
            System.out.println();
        }

    }

    // método para ler uma String
    public static String readString() {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            return reader.readLine();
        } catch (IOException e) {
            throw new RuntimeException("Erro ao ler o dado do teclado");
        }
    }

    // método para ler um valor inteiro
    public static int readInt() {
        String str = readString();
        try {
            return Integer.parseInt(str);
        } catch (NumberFormatException e) {
            throw new RuntimeException(str + " não é um int válido");
        }
    }

    // método para ler um double
    public static double readDouble() {
        String str = readString();
        try {
            return Double.parseDouble(str);
        } catch (Exception e) {
            throw new RuntimeException(str + " não é um double válido");
        }
    }

}

Usando esses métodos, por exemplo, para ler de maneira adequada determinado valor do teclado, se resolve o problema de sujeira no buffer

Se alguém tiver interesse em saber do problema de fazer uso da classe Scanner do modo como está sendo feito no código do @startour recomendo testar o mesmo código do modo como o autor do tópico está fazendo, na parte de ler os valores do teclado. A classe Scanner não é adequada para fazer a leitura de determinado valor do teclado, e devido a isso, se usar essa classe do forma como o autor postou o código inevitavelmente vai dar erro e não será possível cadastrar todos os produtos

Também quero deixar claro q não culpo o @startour por esse erro, até mesmo porque eu nem estaria apto para isso, pois eu mesmo fazia dessa forma quando estudava Java, e acredito que, para muita gente que estuda Java, se trata de um assunto desconhecido

OBS: Só fui aprender realmente a respeito disso q estou falando (sujeira no buffer) quando comecei a estudar o C, pois no C, logo nos primeiros códigos q a gente cria, esse problema referente a sujeira no buffer já aparece, e, devido a isso, a gente é "obrigado" a aprender a lidar com essa questão logo cedo

Para quem quiser entender melhor sobre o assunto recomendo esse vídeo (ele se refere ao C, mas o mesmo princípio se aplica para o Java):

Limpar o Buffer do teclado - vídeo 

 

Edited by Guest
correção no código

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this