I have two String arrays and when I run this:
if (prod[i][0].equals(temporaria[j][0]) && prod[i][0]!= null && temporaria[j][0]!= null)
I get NullPointerException without even entering the IF loop.
I found it strange that if you neglect null values.
How is a sales system without data persistence first register the products and put everything in an array called prod.
Main:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String prod[][] = new String[20][5];
String cod, nome, desc, qtd, valor;
boolean continuar = true;
int escolha, cont_cod = 0;
System.out.printf("Bem Vindo ao sistema de gerenciamento de loja");
while (continuar == true) {
System.out.printf(" \n Selecione uma opção \n 1- Cadastro de Produtos \n 2- Tela de vendas \n 3- Consulta todos produtos \n 4- Sair \n");
escolha = in.nextInt();
switch (escolha) {
//CADASTRO
case 1:
System.out.println("===CADASTRO DE PRODUTOS===");
System.out.println("insira o nome do produto");
nome = in.next();
System.out.println("insira uma descricao do produto");
desc = in.next();
System.out.println("insira a quantidade do produto");
qtd = in.next();
System.out.println("insira o valor do produto");
valor = in.next();
cod = Integer.toString(cont_cod);
cont_cod++;
Cadastrar.Cadastrar(prod, cod, nome, desc, qtd, valor);//metodo que cadastra na matriz
break;
//===================================================================================//
//VENDAS
case 2:
Venda.Venda(prod);//metodo de venda
break;
//===================================================================================//
//CONSULTA DE TODOS OS PRODUTOS
case 3:
for (int i = 0; i < prod.length; i++) {
if (!(prod[i][0] == null)) {
System.out.printf("codigo: " + prod[i][0] + " Produto: " + prod[i][1] + " descricao: " + prod[i][2] + "\n quantidade: " + prod[i][3] + " Valor: R$" + prod[i][4]);
System.out.println();
}
}
break;
//===================================================================================//
//SAIR
case 4:
System.out.println("saindo da aplicacao, ate mais...");
continuar = false;
break;
default:
System.out.println("insira apenas um valor válido para escolha(de 1 a 4)");
break;
}
}
}
}
}
Class Registration:
public static class Cadastrar {
public static void Cadastrar(String prod[][], String cod, String nome, String desc, String qtd, String valor) {
for (int i = 0; i < 19; i++) {
//para cadastrar o primeiro produto
if (prod[0][0] == null) {
prod[i][0] = cod;
prod[i][1] = nome;
prod[i][2] = desc;
prod[i][3] = qtd;
prod[i][4] = valor;
//para cadastrar os proximos produtos usando a ultima posicao nao nula do vetor como referencia
} else if (!(prod[i][0] == null) && prod[i + 1][0] == null) {
prod[i + 1][0] = cod;
prod[i + 1][1] = nome;
prod[i + 1][2] = desc;
prod[i + 1][3] = qtd;
prod[i + 1][4] = valor;
break;
}
}
}
}
So I compare it to the sales class:
public static void Venda(String[][] prod) {
Scanner in = new Scanner(System.in);
int i, vlr_unit, vlr_tot = 0, qtd_prod, qtd_temp;
boolean continua = true;
String confirma, resposta;
String temporaria[][] = new String[20][2]; //MATRIZ TEMPORARIA PARA SALVAR O "CARRINHO"
System.out.println("===VENDA DE PRODUTOS===");
while (continua == true) {
for (i = 0; i < 20; i++) {
System.out.println("insira o codigo do produto: ");
temporaria[i][0] = in.next();
System.out.println("insira a quantidade de compra deste produto: ");
temporaria[i][1] = in.next();
System.out.printf("deseja inserir outro produto? s ou n \n(respostas diferentes de s ou n serão considerado como nao) \n");
resposta = in.next();
if (!(resposta.equals("s"))) {
break;
}
}
//IMPRIMINDO O RESUMO DA VENDA PARA CONFIRMACAO
for (i = 0; i < 20; i++) {
for (int j = 0; j < 20; i++) {
//O ERRO DO NULLPOINTER OCORRE AQUI NESTE IF
if (prod[i][0].equals(temporaria[j][0]) && prod[i][0]!= null && temporaria[j][0]!= null) {
qtd_prod = Integer.parseInt(prod[i][3]);
qtd_temp = Integer.parseInt(temporaria[j][1]);
if (qtd_temp > qtd_prod) { //VERIFICANDO SE HÁ ESTOQUE DISPONIVEL
System.out.println("O produto de codigo " + temporaria[j][1] + " possui quantidade insuficiente para venda requisitada");
} else {
//TRANSFORMANDO OS VALORES DOS PRODUTOS PARA INTEIRO PARA PODER CALCULAR PRECO UNITARIO E TOTAL
vlr_unit = Integer.parseInt(prod[i][4]);
vlr_tot += vlr_unit * (Integer.parseInt(temporaria[j][1]));
System.out.printf("codigo: " + prod[i][0] + " Produto: " + prod[i][1] + "\n quantidade: " + temporaria[j][1] + " Valor: R$" + prod[i][4]);
}
}
}
}
System.out.println("Valor total da compra: " + vlr_tot);
System.out.println();
System.out.println("Confirma compra? s ou n");
confirma = in.next();
//EFETUANDO AS ALTERACOES NA MATRIZ DE PRODUTOS DANDO BAIXA NOS PRODUTOS VENDIDOS
if (confirma.equals("s")) {
for (i = 0; i < 20; i++) {
for (int j = 0; j < 20; i++) {
if (prod[i][0]!= null && temporaria[j][0]!=null && prod[i][0].equals(temporaria[j][0])) // SE O CODIGO DO PROD EM ESTOQUE E NO CARRINHO FOR IGUAL
{
qtd_prod = Integer.parseInt(prod[i][3]);
qtd_temp = Integer.parseInt(temporaria[j][1]);
if (qtd_temp < qtd_prod) {
//CONVERSAO DA QUANTIDADE PARA INTEIRO A FIM DE CALCULAR A NOVA QTD EM ESTOQUE
qtd_prod -= qtd_temp;
prod[i][3] = Integer.toString(qtd_prod);
}
}
}
}
} else {
System.out.println("cancelando venda...");
continua = false;
}
}
}