[ Foro de Java ]

Exception in thread "main" java.lang.NullPointerException

28-Apr-2022 19:44
Invitado (abmioc)
0 Respuestas

package appeac5p1;

/**
*
* @author ainoh
*/
public class AppEAC5P2 {
 public static void main(String[] args) {
       AppEAC5P2 prg = new AppEAC5P2();
       prg.inici();
   }
   
   void inici(){
       int quiHaDeGuanyar;
       int quiDiuLafuncio;
       String [][] dadesJugadors= omplirDadesJugadors();
       
       
       String resultat;
       DadesPartida dadesPartida;
       Partida partida= new Partida();
       
       dadesPartida=partida.crearDadesPartida(dadesJugadors[2][UtilsES.POS_NOM],3);
       
  //PROVA DE quinaApostaGuanya
       
       //Guanya Usuari
       quiHaDeGuanyar = Partida.USUARI;
       dadesPartida.apostesFetes[0]=Partida.TISORA;
       dadesPartida.apostesFetes[1]=Partida.PEDRA;
       quiDiuLafuncio = partida.quinaApostaGuanya(dadesPartida);
       if(quiHaDeGuanyar==quiDiuLafuncio){
           resultat="OK";
       }else{
           resultat="KO";
       }
       System.out.print("Resultat calculat: ");
       System.out.print(quiDiuLafuncio);
       System.out.print(". Resultat correcte: ");
       System.out.println(quiHaDeGuanyar);
       System.out.print("Test 1 de la funció quinaApostaGuanya: ");
       System.out.println(resultat);

       
       //GUANYA MAQUINA
       quiHaDeGuanyar = Partida.MAQUINA;
       dadesPartida.apostesFetes[0]=Partida.PAPER;
       dadesPartida.apostesFetes[1]=Partida.PEDRA;
       quiDiuLafuncio = partida.quinaApostaGuanya(dadesPartida);
       
       if(quiHaDeGuanyar==quiDiuLafuncio){
           resultat="OK";
       }else{
           resultat="KO";
       }
       System.out.print("Resultat calculat: ");
       System.out.print(quiDiuLafuncio);
       System.out.print(". Resultat correcte: ");
       System.out.println(quiHaDeGuanyar);
       System.out.print("Test 2 de la funció quinaApostaGuanya: ");
       System.out.println(resultat);
       
       
      //EMPAT
       quiHaDeGuanyar = Partida.EMPAT;
       dadesPartida.apostesFetes[0]=Partida.PAPER;
       dadesPartida.apostesFetes[1]=Partida.PAPER;
       quiDiuLafuncio = partida.quinaApostaGuanya(dadesPartida);
       if(quiHaDeGuanyar==quiDiuLafuncio){
           resultat="OK";
       }else{
           resultat="KO";
       }
       System.out.print("Resultat calculat: ");
       System.out.print(quiDiuLafuncio);
       System.out.print(". Resultat correcte: ");
       System.out.println(quiHaDeGuanyar);
       System.out.print("Test 3 de la funció quinaApostaGuanya: ");
       System.out.println(resultat);
       
       //TEST de demanarQuantesJugades
       int numJugades;
       System.out.println();
       System.out.println();
       
       //Porvar de seleccionar un valor fora de rang i finalment un dins del rang (3-5)
       numJugades = UtilsES.demanarQuantesJugades();
       System.out.print("Has demanat de fer ");
       System.out.print(numJugades);
       System.out.println(" jugades");
       
       //TEST de demanarAposta
       int aposta;
       System.out.println();
       System.out.println();
       
       //Porvar de seleccionar un valor fora de rang i finalment un dins del rang (0-2)
       String[] apostes = {"PEDRA", "PAPER", "TISORES"};
       aposta = UtilsES.demanarAposta();
       System.out.print("Has apostat per ");
       System.out.println(apostes[aposta]);
       
       //TEST de mostrarTitol
       UtilsES.mostrarTitol("Identificació del jugador.");
       System.out.println();
       System.out.println();
       
       //TEST de mostrarError
       UtilsES.mostrarError("No s'ha pogut emmagatzemar el nom del jugador!");
       System.out.println();
       System.out.println();
       
       //TEST de mostrarGuanyadorPartida
       dadesPartida.nomsJugadors= new String []{"Màquina", "Anna"};
       dadesPartida.tornsGuanyats = new int [] {2,2};
       int guanyador = Partida.EMPAT;
       System.out.println();
       System.out.println();
       System.out.println("++++ EMPAT ++++");
       
       UtilsES.mostrarGuanyadorPartida(dadesPartida.nomsJugadors, dadesPartida.tornsGuanyats, guanyador);
       
       dadesPartida.tornsGuanyats[Partida.MAQUINA] = 1;
       dadesPartida.tornsGuanyats[Partida.USUARI] = 3;
       guanyador = Partida.USUARI;
       System.out.println();
       System.out.println();
       System.out.println("++++ USUARI ++++");

       UtilsES.mostrarGuanyadorPartida(dadesPartida.nomsJugadors, dadesPartida.tornsGuanyats, guanyador);
       
       dadesPartida.tornsGuanyats[Partida.MAQUINA] = 2;
       dadesPartida.tornsGuanyats[Partida.USUARI] = 1;
       guanyador = Partida.MAQUINA;
       System.out.println();
       System.out.println();
       System.out.println("++++ MAQUINA ++++");

       UtilsES.mostrarGuanyadorPartida(dadesPartida.nomsJugadors, dadesPartida.tornsGuanyats, guanyador);
   }
       String [][] omplirDadesJugadors(){
           String [][] dadesJugadors = {
               {"Adria", "5"}, {"Agnes", "0"},  {"Anna", "3"},   {"Arnau", "2"},  
               {"Beth","9"},   {"Blanca", "6"}, {"Bruna", "1"},  {"Carla", "7"},
               {"Cesc", "0"},  {"Clara", "5"},  {"Duna", "2"},   {"Laia", "4"},
               {"Eloi", "3"},  {"Emma", "6"},   {"Gerard", "8"}, {"Guillem", "5"},
               {"Lluc", "7"},  {"Jordi", "1"},  {"Martí", "5"},  {"Max", "3"},
               {"Neus", "6"},  {"Nico", "2"},   {"Nina", "1"},   {"Noa", "6"},
               {"Nora", "1"},  {"Nuria", "8"},  {"Oriol", "6"},  {"Pau", "1"},
               {"Paula", "9"}, {"Pep", "0"},    {"Pol", "10"},   {"Queralt", "3"},
               {"Quim", "1"},  {"Rita", "7"},   {"Roc", "8"},    {"Roger", "9"},
               {"Sergi", "3"}, {"Txell", "1"},  {"Xavi", "9"},   {"Alex", "4"},
               {"Èlia", "0"},  {"Èric", "6"},   {"", ""},        {"", ""}
           };
       return dadesJugadors;
       }
   }
 
package appeac5p1;

public class Partida {
   public static final int EMPAT=2;
   public static final int MAQUINA=0;
   public static final int USUARI=1;
   public static final int PEDRA=0;
   public static final int PAPER=1;
   public static final int TISORA=2;
   

   
   DadesPartida crearDadesPartida (String nomJugador, int maxTorns){
       DadesPartida dadesPartida = new DadesPartida();
       dadesPartida.inicialitza();
       dadesPartida.totalTorns=maxTorns;
       dadesPartida.nomsJugadors [USUARI]=nomJugador;
       return dadesPartida;
       
}
   int quiGuanyaLaPartida (DadesPartida dadesPartida){
       int resultat=0;
       if(dadesPartida.tornsGuanyats[0]<dadesPartida.tornsGuanyats[1]){
           resultat=1;
       }
       else if (dadesPartida.tornsGuanyats[0]>dadesPartida.tornsGuanyats[1]){
           resultat=0;
       }
       else if (dadesPartida.tornsGuanyats[0]==dadesPartida.tornsGuanyats[1]){
           resultat=2;
       }
  return resultat;
   }
   
   
   int quinaApostaGuanya(DadesPartida dadesPartida){
       int apostaM=dadesPartida.apostesFetes[0];
       int apostaU=dadesPartida.apostesFetes[1];
       int resultat;
       if(apostaM == apostaU){
           resultat=EMPAT;
       }else if(apostaM==PEDRA && apostaU==PAPER){
           resultat=USUARI;
       }else if(apostaM==PAPER && apostaU==TISORA){
           resultat=USUARI;
       }else if(apostaM==TISORA && apostaU==PEDRA){
           resultat=USUARI;
       }else{
           resultat=MAQUINA;
       }
       return resultat;
   }
}

package appeac5p1;
import java.util.Scanner;
public class UtilsES {
   static final String MISSATGE_LINIA_SEPARACIO = "============================================================================";;
   static final String MISSATGE_TITOL_MENU = "                       PEDRA/PAPER/TISORA EL VIDEOJOC";
   static final String MISSATGE_TRII_OPCIO = "Trieu una opció";
   static final String MISSATGE_ERROR_NO_NUMERO = "Error el que heu escrit no és un número. Torneu-ho a intentar";
   static final String MISSATGE_COMIAT = "Fins la propera";
   static final String MISSATGE_TITOL_IDENTIFICACIO = "PANTALLA D'IDENTIFICACIÓ DEL JUGADOR";
   static final String MISSATGE_TRII_OPCIO_NOM_JUGADOR = "Introduïu el nom del jugador: ";
   static final String MISSATGE_TITOL_MOSTRAR_DADES = "               MOSTRAR DADES D'UN JUGADOR";
   static final String MISSATGE_ERROR_DADES_PLENES = "No s'ha pogut enregistrar el jugador. S'ha sobrepassat la capacitat màxima";
   static final String LINIA_SEP_OPCIONS= "----------------------------------------------------------------------------";
   static final String LINIA_SEP_ALERTA="!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
   static final String LINIA_FIN_PARTIDA="****************************************************************************";
   static final String MISSATGE_FIN_PARTIDA="FINAL DE LA PARTIDA";
   static final String MISSATGE_QUANTES_JUGADES = "Quantes jugades vols realitzar(3-5)?:";
   static final String MISSATGE_RANG_JUGADES = "El rang vàlid de jugades a escollir es troba entre 3 i 5 ambdós inclosos.\nTorneu-ho a intentar";
   static final String MISSATGE_DEMANAR_APOSTA = "Quina aposta fas (0:PEDRA, 1:PAPER, 2:TISORA)?";
 
   static final short NUM_JUGADORS = 30;
   static final short NUM_DADES_JUGADORS = 2;
   static final short POS_NOM = 0;
   static final short POS_PARTIDES_GUANYADES = 1;

   void mostraDadesJugador(int posJugador, String[][] dadesJugadors){
       separarLinies(2);
       System.out.println(MISSATGE_LINIA_SEPARACIO);
       System.out.println(MISSATGE_TITOL_MOSTRAR_DADES);
       System.out.println(MISSATGE_LINIA_SEPARACIO);
       System.out.println("PARTIDES GUANYADES     NOM JUGADOR");
       System.out.println(MISSATGE_LINIA_SEPARACIO);
       System.out.print("       " );
       System.out.print(dadesJugadors[posJugador][POS_PARTIDES_GUANYADES]);
       System.out.print("                ");
       System.out.println(dadesJugadors[posJugador][POS_NOM]);
   }
   
   static int demanarEnter(String missatge, String missatgeError){
       Scanner scanner = new Scanner(System.in);        
       int ret;
       boolean correcte;
       do{
           System.out.println(missatge);
           correcte=scanner.hasNextInt();
           if(!correcte){
               scanner.next();
               System.out.println(missatgeError);
           }
       }while(!correcte);
       ret = scanner.nextInt();  
       scanner.nextLine();        
       return ret;
   }
   String demanarString(String missatge, String missatgeError){
       Scanner scanner = new Scanner(System.in);
       System.out.println(missatge);
       String textIntroduit = scanner.nextLine();

       while (textIntroduit.isEmpty()){
           System.out.println(missatgeError);
           System.out.println(missatge);
           textIntroduit = scanner.nextLine();
       }
       return textIntroduit;
   }
   
   void separarLinies(int linies){
        for(int i=0; i<linies; ++i){
           System.out.println();
       }  
       
       
   }
  static int demanarQuantesJugades(){
       int numJugades = 0;
       while (numJugades < 3 || numJugades > 5){
           numJugades =demanarEnter(MISSATGE_QUANTES_JUGADES, MISSATGE_ERROR_NO_NUMERO);
           if(numJugades < 3 || numJugades > 5){
               System.out.println(MISSATGE_RANG_JUGADES);
           }
       }
       return numJugades;
   }    
   
   static int demanarAposta(){
      boolean correcte;
       int ap;
       do{
           System.out.println();
           ap = demanarEnter(MISSATGE_DEMANAR_APOSTA, MISSATGE_ERROR_NO_NUMERO);
           correcte = ap>=0 && ap<=2;
       }while(!correcte);
       
       return ap;
   }
   
   static void mostrarTitol(String titolPantalla){
      System.out.println(MISSATGE_LINIA_SEPARACIO);
      System.out.println(MISSATGE_TITOL_MENU);
      System.out.println(MISSATGE_LINIA_SEPARACIO);
      System.out.println(titolPantalla);
      System.out.println(LINIA_SEP_OPCIONS);
     
  }
 
   static void mostrarError(String missatge){
      System.out.println(LINIA_SEP_ALERTA);
      System.out.println(LINIA_SEP_ALERTA);
      System.out.println(missatge);
      System.out.println(LINIA_SEP_ALERTA);
      System.out.println(LINIA_SEP_ALERTA);
     
  }
  static void mostrarGuanyadorPartida(String[] nomsJugadors, int[] tornsGuanyats, int guanyador){
       System.out.println(LINIA_FIN_PARTIDA);
       System.out.println("            FINAL DE LA PARTIDA");
       System.out.println(LINIA_FIN_PARTIDA);
       System.out.println();
       System.out.println(MISSATGE_LINIA_SEPARACIO);
       System.out.println("        PUNTUACIO FINAL");
       System.out.println(MISSATGE_LINIA_SEPARACIO);
       System.out.printf("%9s", nomsJugadors[0]);
       System.out.printf("%9s", nomsJugadors[1]);
       System.out.println("\n========================");
       System.out.printf("%7d", tornsGuanyats[0]);
       System.out.printf("%9s", tornsGuanyats[1]);
       System.out.println("\n========================");
         if(guanyador == Partida.EMPAT){
           System.out.println("Esteu empatats");
       }else{
           System.out.print("El guanyador de la partida és: ");
           System.out.println(nomsJugadors[guanyador]);
       }
   }
 
   
}


Al ejecutar me aparece: run:
Exception in thread "main" java.lang.NullPointerException
at appeac5p1.Partida.crearDadesPartida(Partida.java:17)
at appeac5p1.AppEAC5P2.inici(AppEAC5P2.java:28)
at appeac5p1.AppEAC5P2.main(AppEAC5P2.java:15)
C:\Users\ainoh\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)



No entiendo, alguien me puede decir donde está el error?









(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)