Meu código apresentando erro no if e último return. Alguém me ajuda por favor

package matriz_ex_12;
import java.util.Random;
import javax.swing.JOptionPane;

/**
 * @author ester
 */
public class Matriz_Ex_12 {

    
    public static void main(String[] args) {
    
        Random randon = new Random();
        final int Qtd_col=3;
        final int Qtd_lin=3;
        int [][] matriz = new int[Qtd_lin][Qtd_col];
        matriz = cadastrarNumeros (Qtd_lin , Qtd_col);
        JOptionPane.showMessageDialog(null, "***** Memorize  *****");
        exibirDados(matriz);
        
        int sorteioLinha = randon.nextInt(Qtd_lin);
        int sorteioColuna = randon.nextInt(Qtd_col);
        int num=Integer.parseInt(JOptionPane.showInputDialog("Qual número consta na linha "+(sorteioLinha+1)+",coluna "+(sorteioColuna+1)+" da matriz" ));
        
        if (verifica(matriz[sorteioLinha][sorteioColuna], num)= true) 
        {
           JOptionPane.showMessageDialog(null, "*** PARABÉNS VOCÊ ACERTOU !!! *** ");
        }    
        else
        {
           JOptionPane.showMessageDialog(null, "*** QUE PENA VOCÊ ERROU !!! O número correto seria:"+ matriz[sorteioLinha][sorteioColuna] ); 
        }
        exibirDados(matriz);
    }
    
    static int[][] cadastrarNumeros(int nLin , int nCol)
     {
        int [][] n = new int [nLin][nCol];
        Random randon = new Random();
        
        for  (int l=0; l < nLin; l++)
        {
            for  (int c = 0; c < nCol; c++)
            {
                n[l][c]= randon.nextInt(50);
            }
        }
        return n;
    }
       
    
    static Boolean verifica (int numMatriz)
    {
        return numeroMatriz == numUsuario  ? true:  false;
    }

    static void  exibirDados(int[][] n)
    {
       for  (int i=0; i < 3; i++)
       {
          for  (int j=0; j < n[0].length; j++) 
           {
           System.out.print(n[i][j]+ "\t");
           }
          System.out.println("\n");
       }

    }
}

Nesta linha você está usando o operador de atribuição (=) ao invés de usar o de comparação (==):
if (verifica(matriz[sorteioLinha][sorteioColuna], num) = true) {
Para corrigir basta alterar o = para == ou omitir a parte == true já que o método verifica retorna um valor booleano que pode ser usado diretamente dentro do if, sem a necessidade de uma comparação.

O segundo erro está no método verifica, onde você esqueceu de adicionar o parâmetro int numUsuario e também colocou numeroMatriz ao invés de numMatriz.

1 curtida

Cara, coisas como “urgente”, “por favor”, etc não agregam em nada. Mostra, apenas, que você é um desesperado.
Qual o erro?

1 curtida

Darlan, realmente estou desesperada. Tenho 53 anos, iniciei o curso há menos de 3 meses, concorrendo
a uma vaga de emprego com 39 jovens que praticamente nasceram com todas as linguagens na “ponta da língua” . Tenho muitas dificuldades. O “por favor” indica atenção com retorno de imensa gratidão, por estar perguntando algo obvio a especialistas como vc. Obrigada.

1 curtida

Observações:

1 - Use nomes significativos para nomes de constantes, variáveis, métodos, classes, etc. Por exemplo, em vez de num, indique numero. Isso facilita a leitura e dá ideia do que se pretende com o código;

2 - Não entendi porque você usou como retorno o tipo encapsulado Boolean do tipo primitivo boolean;

3 - É uma boa prática nomear métodos que retornam um booleano como se fossem uma pergunta. Por exemplo, em vez de verifica, usa-se algo como memorizado, onde se subentende “memorizado?” já que retorna true/false;

4 - Como o método verifica retorna um booleano e as estruturas de seleção, como o if sempre verificam se uma condição é verdadeira para então, somente então, executar um código, não há necessidade de comparar com true (verificar se é verdade). Além disso, como @leonardosnt comentou tu estava atribuindo (=) em vez de comparando (==);

5 - No teste

if(verifica(matriz[linhaSortiada][colunaSrtiada], numero))
           JOptionPane.showMessageDialog(null, "*** Parabéns você acertou !!! *** "); 

você envia dois parâmetros, mas o método espera apenas um:

static boolean verifica(int numeroMatriz){
        return numeroMatriz == numeroUsuario  ? true : false;
    }

Por fim, aplicando as observações:

import java.util.Random;
import javax.swing.JOptionPane;

/**
 * @author ester
 */
public class Matriz_Ex_12 {

    public static void main(String[] args){
        Random randon = new Random();
        final int QUANTIDADE_LINHA = 3;
		final int QUANTIDADE_COLUNA = 3;
		int linhaSortiada = randon.nextInt(QUANTIDADE_LINHA);
        int colunaSortiada = randon.nextInt(QUANTIDADE_COLUNA);
        int[][] matriz = new int[QUANTIDADE_LINHA][QUANTIDADE_COLUNA];
        matriz = cadastrarNumeros (QUANTIDADE_LINHA , QUANTIDADE_LINHA);
		
        JOptionPane.showMessageDialog(null, "***** Memorize  *****");
        exibirDados(matriz);
        
        int numero = Integer.parseInt(
			JOptionPane.showInputDialog("Qual número consta na linha " 
				+ (linhaSortiada) + ", coluna " + (colunaSortiada) + " da matriz"));
        
        if(memorizado(matriz[linhaSortiada][colunaSortiada], numero))
           JOptionPane.showMessageDialog(null, "*** Parabéns você acertou !!! *** ");
       
        else
           JOptionPane.showMessageDialog(null, "*** Que pena você errou !!! O número correto seria:"+ matriz[linhaSortiada][colunaSortiada] ); 
        
        exibirDados(matriz);
    }
    
    public static int[][] cadastrarNumeros(int numeroLinha , int numeroColuna){
        int[][] dados = new int[numeroLinha][numeroColuna];
        Random randon = new Random();
        
        for(int l = 0; l < numeroLinha; l++){
            for  (int c = 0; c < numeroColuna; c++){
                dados[l][c]= randon.nextInt(50);
            }
        }
        return dados;
    }
    
    public static boolean memorizado(int numeroMatriz, int numeroUsuario){
        return numeroMatriz == numeroUsuario  ? true : false;
    }

    public static void  exibirDados(int[][] n){
		for(int i = 0; i < 3; i++){
			for(int j = 0; j < n[0].length; j++)
				System.out.print(n[i][j]+ "\t");
         
			System.out.println("\n");
		}
    }
}

Rodando…

image
image
image

1 curtida

Mas quando tu coloca o título do tópico assim, muitos não lhe responderão… Prefira a objetividade e clareza. Um tópico aberto com um título claro e não histriônico melhora as suas chances de obter boas respostas.

Obrigadaaa, deu certo, além de corrigir , tb substituí!

Obrigadaa! Deu certo

Para começar, não nos importamos com idade, gênero, etnia, religião ou o que seja. Nos importamos com objetividade e assertividade.
Você perdeu um tempo precioso justificando coisas desnecessárias.
Deveria ter se atentado a descrever o erro. Isso, sim, faria diferença na busca por uma solução.
Qualquer coisa é desculpa e desculpa é vitimismo.

2 curtidas