Forma condicional mais simples

Fala pessoal !!! Tava fz um algoritimo aq para simular uma partida de pedra, papel e tesoura, mas acabei tendo que escrever muitos “IFs”. Tem alguma forma mais simples de escrever esse ifs? como, por exemplo, algum tipo de comando ou macete que permitar realizar essa estrutura condicional de forma mais ampla?

Tinha tentado descobrir uma forma de escrver (em programaçao) esta frase: “quando uma das variáveis ( no caso a rrr e a rrb) receberem um determinado valor e a outra receber um segudo valor, idependentemente de qual das duas receber um desses dois “valores alvo”, faça tal coisa…”, mas não cheguei a lugar nenhum.

espero que tenham conseguido entender a questão :wink: vlw pela ajuda!!!

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package jokempo;
    //EU SEi Q N É JOKEMPO haha

import java.util.Random;
import java.util.Scanner;

/**
*

  • @author vangod
    */
    public class Jokempo {

    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      // TODO code application logic here

      Scanner in = new Scanner(System.in);

      String resp = new String(“sim”);
      String rrp ;
      // objeto como o in do Scanner; necessário r.random([limite]);
      Random r = new Random();
      int rrb;

      int escolha;

      while ( “sim”.equals(resp)){

       System.out.println("Que os jogos comecem: \n digite: \n 0 para pedra "
               + "\n 1 para Tesoura\n 2 para papel. ");
        int rrr = in.nextInt();
       
        if (rrr == 0){
            rrp = "pedra";
        }else{
            if (rrr == 1){
                rrp = "Tesoura";
            }else{
                rrp = "papel";
            }
        }
        
        System.out.println("Você escolhe " + rrp);
        
      rrb = r.nextInt(2);
        
        if( rrb == 0){
           System.out.println("eu escolho Pedra");
       }else{
           if (rrb == 1){
               System.out.println("eu escolho Tesoura");
           }else{
               System.out.println("eu escolho papel");
           }
       }
       
       
       if (rrr == rrb){
           System.out.println("2x" + rrp + "nao da em nada");
           }else{
           if(( rrr == 0 )&& (rrb == 2)){
               System.out.println("Voce ganhou pela sorte");
               }else{
               if ((rrr==0)&&(rrb == 1)){
                   System.out.println("fracassou miseravelmente");
                   }else{
                    if ((rrr==1)&&(rrb == 2)){
                        System.out.println("ganhou pela sorte");
                        }else{
                         if ((rrr==1)&&(rrb == 0)){
                             System.out.println("fracassou miseravelmente");
                             }else{
                              if ((rrr==1)&&(rrb == 2)){
                                  System.out.println("isso foi sorte");
                                  }else{
                                  if ((rrr==2)&&(rrb == 0)){
                                      System.out.println("vc tem muita sorte");
                                      }else{
                                           System.out.println("LIXXXXOOOOOOOO");
                                           }
                                        }
                                    }
                               }
                             
                        }
                   
                   }
                    
                }
       System.out.println("Quer jogar mais um vez?");
       resp = in.next();
      

    }
    }
    }

Uma forma comum de eliminar ifs e deixar o código mais simples de entender é usar Maps para descrever essa relação entre dois valores.
Um exemplo para a primeira parte, você está mapeando um código (0, 1, 2) para a opção escolhida (pedra, tesoura, papel).
Poderia usar um mapa com essa informação:

  Map<Integer, String> Opcoes = Map.of(0, "Pedra", 1, "Tesoura", 2, "Papel");

Na segunda parte, você pode considerar que:

  • Se os dois valores são iguais é um empate
  • Se forem diferentes ou você ganhou ou perdeu.

Imagine que você tenha um map assim:

Map<String, String> opcaoGanhaDeQuem = Map.of( 
  "Pedra", "Tesoura", 
  "Tesoura",  "Papel",
  "Papel", "Pedra"
);

Com esse map você deve conseguir simplificar a lógica do seu código.

2 curtidas

O que é rrr, rrb e rrp?

coloquei uns nomes meio nada a ver msm, mas rrr é resposta (usuário), rrp é pra “converter” o número escolhido em palavra e rrb é a “escolha” aleatória do bot.

Não conhecia esse “map”, vou dar uma pesquisada pra me aprofundar!!! vlwww