Ir ao conteúdo

Java Switch não reconhece a matriz e fala que ela esta nula


Ir à solução Resolvido por ortopntz,

Posts recomendados

Postado

Estou exercitando java e sou novato ainda. 3 semestre de S.I e tive uma ideia de fazer um sistema de feira que vou implementar a um banco. Porém antes fui ver como ficaria usando estruturas de dados e fiz com matriz.

 

Quando eu coloco o switch e faço  a linha de código do case 1 ao entrar no for ele dar esse erro  

Cannot invoke "Object.equals(Object)" because "comidas[i][0]" is null porém se eu tentar fazer o codigo sem switch ele funciona dboa. então o problema é sempre quando eu coloco o switch porém não estou conseguindo encontrar o erro, ja tentei o chat gpt e tambem não conseguir.

 

import java.util.Scanner;

import javax.swing.JOptionPane;

public class teste {
    public static void main(String[] args) {

        String escolha;
        Scanner n = new Scanner(System.in);
        Object[][] comidas = new Object[20][20];
       comidas[0][0] = "Pao";
        comidas[0][1] = 5;
        comidas[1][0] = "Arroz";
        comidas[1][1] = 10;
        comidas[2][0] = "feijao";
        comidas[2][1] = 4;
        comidas[3][0] = "Carne";
        comidas[3][1] = 0;
        do {
        
            System.out.println(" 1.Procurar itens \n 2.Procurar item especifico que esteja em falta");
            System.out.println("Escolha uma das opções");
            int feira = n.nextInt();
            switch (feira) {

                case 1:
                    
                    System.out.print("Qual nome do produto você deseja saber? ");
                    String nome = n.nextLine();

                    for (int i = 0; i < comidas.length; i++) {
                        if (comidas[i][0].equals(nome)) {
                            System.out.println("A quantidade é: " + comidas[i][1]);

                            break;
                        }
                    }
                    break;
               case 2:
                    System.out.print("Qual item voce deseja saber? ");
                    String item = n.nextLine();
                    for (int i = 0; i < comidas.length; i++) {
                        if (comidas[i][0].equals(item)) {
                            if (comidas[i][1].equals(0)) {

                                System.out.println("Este item está em falta.");

                                break;
                            }
                            System.out.println("Relaxa esse não esta em falta.");
                            break;
                        }
                    }
                    break;

                default:
                    break;
                }

             System.out.println("Deseja continuar olhando? ");
            escolha = n.nextLine();

        } while (escolha != "sim");

        JOptionPane.showMessageDialog(null, "Obrigado por nos consultar!");

        n.close();
    }
}

 

  • Solução
Postado

O problema está no n.nextInt(). Este método apenas consome o número inteiro que você passa no console, mas não o Enter, que é representado pelo caracatere '\n'.
Esse '\n' fica no buffer do scanner, e quando você faz o n.nextLine(), ele vai continuar lendo o buffer e interpretar esse '\n' que sobrou como se fosse uma nova leitura, e a variável "nome" recebe um valor vazio.

Pra resolver isso você pode colocar um n.nextLine() logo acima da linha com o "String nome = n.nextLine()". Isso vai fazer ele "jogar fora" esse resto que ficou no buffer.
 

System.out.print("Qual nome do produto você deseja saber? ");
n.nextLine();
String nome = n.nextLine();


você também pode trocar o n.nextInt() pelo n.nextLine() e trocar os cases por strings, o que seria mais seguro pois não causa esse tipo de problema.

  • Obrigado 1
Postado

@ortopntz Caramba vllw kkkk, pior que o chat gpt falou isso e eu achei que ele tava errado pois  eu não sabia que o nextInt não consumia o enter. interessante. obrigado!

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!