Error Exception in thread "main" in my Array

0

People, help me, I can not find where the error is in my code. I know this error refers to not having the position in the array to store but I do not know where to fix it.

package br.com.fiap.exercicios.lista2.exercicio2;
import java.util.Scanner;

public class Produto {

private int quantidade;
private double preco;
private double desconto;
Scanner teclado = new Scanner(System.in);

public int getQuantidade() {
    return quantidade;
}
public void setQuantidade(int quantidade) {
    this.quantidade = quantidade;
}
public double getPreco() {
    return preco - ((this.desconto/100)*this.preco);
}
public void setPreco(double preco) {
    this.preco = preco;
}
public double getDesconto() {
    return desconto;
}
public void setDesconto(double desconto) {

    int contador = 0;
    while(contador != 1){
        if(desconto > 100 || desconto < 0){
            System.out.println("Entre com um desconto válido, descontos variam de 0 - 100%.");
            desconto = teclado.nextDouble();
            this.desconto = desconto;
        }else{
            this.desconto = desconto;
            contador = 1;
        }
      }

   }

}

The error:

  

Exception in thread "main" java.lang.NullPointerException       

appears after I type the price in the loop, in the line highlighted below

package br.com.fiap.exercicios.lista2.exercicio2;
import java.util.Scanner;

public class Teste {

public static void main(String[] args){

    Produto[] carrinho = new Produto[1000];
    Scanner scanner = new Scanner(System.in);
    int n;
    double precoTotal = 0;

    System.out.println("Quantos produtos você deseja comprar?");
    n = scanner.nextInt();

    for(int i = 0; i < n; i++){

        System.out.println("Entre com a quantidade do produto " + i+1 + ":");
        int quantidade = scanner.nextInt();
        carrinho[i].setQuantidade(quantidade);

        System.out.println("Entre com o  valor do produto " + i+1 + ":");
      double preco = scanner.nextDouble();// o erro ocorre aqui
        carrinho[i].setPreco(preco);
        System.out.println("Entre com o desconto do produto " + i+1 + " caso haja:");
        double desconto = scanner.nextDouble();
        carrinho[i].setDesconto(desconto);

    }

    for(int i = 0; i < n; i++){
        precoTotal += carrinho[i].getPreco();
    }

    System.out.println("O valor total da compra é de R$" + precoTotal);
}

}
    
asked by anonymous 26.03.2017 / 22:10

1 answer

1

Good afternoon, depending on your problem, you can solve by setting carrinho[i] = new Produto(); just below your for , one point of attention is with respect to the array you are using, Produto[] carrinho = new Produto[1000]; you are limited to 1000 elements, you you can switch to a collection, ArrayList for example.

below is the correction

public class Teste {

    public static void main(String[] args) {

        Produto[] carrinho = new Produto[1000];
        Scanner scanner = new Scanner(System.in);
        int n;
        double precoTotal = 0;

        System.out.println("Quantos produtos você deseja comprar?");
        n = scanner.nextInt();

        for (int i = 0; i < n; i++) {
            // Inicia uma nova instância para a posicao i de seu array
            carrinho[i] = new Produto();

            System.out.println("Entre com a quantidade do produto " + i + 1 + ":");
            int quantidade = scanner.nextInt();
            carrinho[i].setQuantidade(quantidade);

            System.out.println("Entre com o  valor do produto " + i + 1 + ":");
            double preco = scanner.nextDouble();
            carrinho[i].setPreco(preco);

            System.out.println("Entre com o desconto do produto " + i + 1 + " caso haja:");
            double desconto = scanner.nextDouble();
            carrinho[i].setDesconto(desconto);

        }

        for (int i = 0; i < n; i++) {
            precoTotal += carrinho[i].getPreco();
        }

        System.out.println("O valor total da compra é de R$" + precoTotal);
    }

}

If you want to switch to collection for example you could do it as follows:

public class Teste {

    public static void main(String[] args) {

        List<Produto> carrinho = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        int n;
        double precoTotal = 0;

        System.out.println("Quantos produtos você deseja comprar?");
        n = scanner.nextInt();

        for (int i = 0; i < n; i++) {
            // cria uma nova instancia de produto
            Produto produto = new Produto();

            System.out.println("Entre com a quantidade do produto " + i + 1 + ":");
            int quantidade = scanner.nextInt();
            produto.setQuantidade(quantidade);

            System.out.println("Entre com o  valor do produto " + i + 1 + ":");
            double preco = scanner.nextDouble();
            produto.setPreco(preco);

            System.out.println("Entre com o desconto do produto " + i + 1 + " caso haja:");
            double desconto = scanner.nextDouble();
            produto.setDesconto(desconto);

            // adiciona a collection de produtos
            carrinho.add(produto);

        }

        for (int i = 0; i < n; i++) {
            precoTotal += carrinho.get(i).getPreco();
        }

        System.out.println("O valor total da compra é de R$" + precoTotal);
    }

}
    
26.03.2017 / 23:37