Jogo com números aleatórios

Boa noite, sou iniciante em programação(1 semestre de ADS) estou com travado em um exercício que é um jogo de números em aleatórios.
A pergunta é assim.
“Implementar uma aplicação para gerar um valor aleatório entre 0 e 10. Solicitar ao usuário o número sorteado.
Exibir o valor sorteado e a quantidade de tentativas realizadas.”

Minha classe ficou assim:

package numeroaleatorioAPP;

public class Jogo {
private int num;
private int aleatorio;
private int tentativas=1;
private int chances=1;

public int getNum() {
    return num;
}

public void setNum(int num) {
    this.num = num;
}

public int getAleatorio() {
    return aleatorio;
}

public void setAleatorio(int aleatorio) {
    this.aleatorio = aleatorio;
}

public int getTentativas() {
    return tentativas;
}

public void setTentativas(int tentativas) {
    this.tentativas = tentativas;
}

public int getChances() {
    return chances;
}

public void setChances(int chances) {
    this.chances = chances;
}


//Métodos

public int numeroAleatorio(){
   aleatorio=(int)(1+Math.random()*10);
    return aleatorio;
}
public String jogo(){
    if(aleatorio<num){

        return "Tente um número maior";
        
    } else if(aleatorio>num){
 
        return "Tente um número menor";
         
}
    else if(num==aleatorio){
        return "Acertou";
    }
    return null;
}

e Main assim

package numeroaleatorioAPP;

import javax.swing.JOptionPane;

public class NumeroAleatorio {

public static void main(String[] args) {
    int num=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número"));
    int chance=1;
    int tentativa=1;
    
    
    Jogo valor = new Jogo();
    valor.setNum(num);
            
  
    while(num!=tentativa && chance <10){
          JOptionPane.showMessageDialog(null, "teste" + valor.jogo());
          num=Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número"));
          tentativa++;
          chance++;
          JOptionPane.showMessageDialog(null, "teste" + valor.jogo());
}

}

}

estou travado não sei mais o que fazer, precisaria fazer um switch?

Sem mudar nada na classe Jogo, seu main poderia ficar assim:

public static void main(String[] args) {
    Jogo jogo = new Jogo();
    jogo.setAleatorio( jogo.numeroAleatorio() );
    jogo.setChances( 5 );

    boolean temTentativas;
    int num, tentativa = 0;
    String resultado = "digite um número";

    do {
        num = Integer.parseInt(JOptionPane.showInputDialog(null, resultado));
        jogo.setNum(num);
        resultado = jogo.jogo();
        tentativa++;
        temTentativas = tentativa < jogo.getChances();
    } while (!resultado.equals("Acertou") && temTentativas);

    String mensagem = resultado.equals("Acertou") ? "Ganhou!!!" : "Excedeu tentativas";

    JOptionPane.showConfirmDialog(null, mensagem);
}

Você só precisa corrigir as mensagens no método jogo pra ficar assim:

public String jogo(){
    if(aleatorio > num){
        return "Tente um número maior";
    } else if(aleatorio < num){
        return "Tente um número menor";
    }
    
    return "Acertou";
}

O problema é que vários métodos desnecessários na sua classe, então eu fiz uma proposta de melhoria. Ficou assim:

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

class Jogo {
    private static final int MAXIMO_DE_TENTATIVAS = 10;

    private int meta = new Random().nextInt(11);
    private int tentativas = 1;

    public boolean deveContinuar(int n) {
        if (this.temTentativas()) {
            this.tentativas++;
            return this.meta != n;
        }

        return false;
    }

    public boolean temTentativas() {
        return this.tentativas < MAXIMO_DE_TENTATIVAS;
    }

    public String resultado() {
        return !this.temTentativas() ? "Execedeu tentativas" : "Ganhou! O número era " + this.meta;
    }
}

class Main {
    public static void main(String[] args) {
        Jogo jogo = new Jogo();
        int numero;

        do {
            numero = Integer.parseInt(JOptionPane.showInputDialog(null,"Digite o número"));
        } while(jogo.deveContinuar(numero));

        System.out.println(jogo.resultado());
    }
}

return !this.temTentativas() ? "Execedeu tentativas" : "Ganhou! O número era " + this.meta;

teria como explicar essa linha, vi que ela uma abreviação do if, mas como ela funciona?

e pra retornar nessa nova que você fez, tente um numero maior ou menor, ficaria na main mesmo?

Funciona assim:

CONDIÇÃO  ?  EXECUTA_QUANDO_TRUE  :  EXECUTA_QUANDO_FALSE  ;

O método temTentativas() responde a seguinte pergunta:

O jogador ainda possui tentativas?

Quando eu coloco o ! antes eu estou respondendo a seguinte pergunta:

O jogador já atingiu o limite de tentativas?

Então, na linha que vc destacou eu estou dizendo o seguinte:

Se o jogador atingiu o limite de tentativas
Então retorne a mensagem "Excedeu tentativas"
Se não (ou seja, se o jogador ainda tinha tentativas restantes), retorne a mensagem "Ganhou..."

A lógica disso é a seguinte: há apenas duas formas de o usuário deixar o loop.

  1. Se ele exceder as tentativas
  2. Se ele acertar

Então eu testo pra ver se ele excedeu as tentativas, se excedeu, beleza, ele perdeu. Mas se não excedeu, eu já sei que ele só pode ter ganhado, entende?

Entendi, obrigado. Agora da lista só falta mais um que estou quebrando a cabeça e não consigo resolver kk vou postar em outro tópico. muito obrigado