problème attributs

problème attributs - Java - Programmation

Marsh Posté le 08-06-2012 à 23:20:51    

Bonjour,
 
J'ai un souci sur mon code qui affiche:
 
Exception in thread "main" java.lang.NullPointerException
 at java.io.Writer.write(Unknown Source)
 at java.io.PrintStream.write(Unknown Source)
 at java.io.PrintStream.print(Unknown Source)
 at java.io.PrintStream.println(Unknown Source)
 at Combat.ChangerCap(Combat.java:141)
 at TestCombat.main(TestCombat.java:8)
 
je sais que c'est une histoire de valeur null dans la méthode ChoisirCap() que je n'arrive pas à résoudre.
 
J'aimerai savoir comment faire pour récupérer mes attributs de choisirCap avec leur propre valeur (j'ai aussi une classe enum composer de caps, d'où le tableau)
 
 
 
 

Code :
  1. import java.util.Scanner;
  2. import java.util.Random;
  3. public class Combat {
  4.       public SousMarin Realiser;
  5. private Object CapInitial;
  6. private Object nbrAl;
  7.      
  8.      
  9.       public void TirerTorpille() {
  10.       
  11.       
  12.  
  13.  
  14.  
  15.   }
  16.   public void Sonder() {
  17.    }
  18.   public void CommencerCombat() {
  19.   System.out.println("Le combat commence!\n\n Vous recevez 20 points de vie" );
  20.  
  21.  
  22.  
  23.   /*Le cap est tiré aléatoirement*/
  24.   }
  25.   public void ChoisirActionCombattre() {
  26.   System.out.println("Choisissez l'action à réaliser" );
  27.  
  28.   System.out.println("1- Tirer Torpille\n 2-Sonder\n 3-Changer de Cap\n 4-Capituler" );
  29.  
  30.   Scanner sc = new Scanner(System.in);
  31.  
  32.  
  33.   int choix = sc.nextInt();
  34.  
  35.   if(choix==1){
  36.    System.out.println("Tirer la torpille" );
  37.    TirerTorpille();
  38.   }
  39.  
  40.   else if(choix==2){
  41.    System.out.println("\nSonder" );
  42.    Sonder();
  43.   }
  44.  
  45.   else if(choix==3){
  46.    System.out.println("\nChanger de Cap" );
  47.    ChangerCap();
  48.   }
  49.  
  50.   else{
  51.    System.out.println("\nCapituler" );
  52.   }
  53.  
  54.  
  55.  
  56.   }
  57.   public void MenuCombattre() throws Exception {
  58.   /*Menu du combat*/
  59.   System.out.println("MENU COMBATTRE" );
  60.  
  61.   System.out.println("Voulez-vous démarrer le combat?" );
  62.  
  63.   System.out.println("Si oui, tapez 1 si non tapez 2\n" );
  64.  
  65.   Scanner s= new Scanner(System.in);
  66.   int choix;
  67.   choix=s.nextInt();
  68.  
  69.   if(choix==1){
  70.    CommencerCombat();
  71.   }
  72.  
  73.   else{
  74.    Partie p= new Partie();
  75.    p.AfficherMenuPrincipal();
  76.   }
  77.  
  78.  
  79.   }
  80.   public void Capituler() {
  81.   }
  82. public void ChoisirCap(){
  83.   
  84.   
  85.    Random r = new Random();
  86.    int nbrAl = r.nextInt(8);
  87.    Cap[] valeur = Cap.values();
  88.    Cap CapInitial =  valeur[nbrAl];
  89.    System.out.println("Votre cap de départ est: " );
  90.    System.out.println( CapInitial);
  91.   }
  92.   public void ChangerCap() {
  93.  
  94.  
  95.  /**
  96.   * Si on change de cap on bouge de 45°.
  97.   *  
  98.   */  Combat j=new Combat();
  99.     j.ChoisirCap();
  100.                                Cap CapInitial= int valeur[i+1];
  101.  System.out.println(CapInitial);
  102. //System.out.println(i);
  103.   }
  104.   public void AfficherMenuCombattre() {
  105.  
  106.  
  107.   }
  108. }

Reply

Marsh Posté le 08-06-2012 à 23:20:51   

Reply

Marsh Posté le 10-06-2012 à 13:44:23    

Bonjour,
 
Première chose, merci pour la stack trace, par contre faites attention le numéro de ligne indiqué dans la stacktrace n'est pas compatible avec le listing de votre code!
 
Malgré ça je vous répond sans vous donnez directement la bonne réponse que je n'ai pas.
 
On commence par les attributs, à moins que celà soit absolument nécessaire ne créez jamais d'objet avec le type Object!
 

Code :
  1. private Object CapInitial;
  2. private Object nbrAl;


 
non!
 
À la place préférez un type explicite (int, String, MonObject, ...), qui vous aidera vous, le lecteur mais aussi votre IDE/compilateur! (tout le monde quoi!)
 
Ensuite pensez à respecter les conventions Java en utilisant la camel case.
 
Les attributs commencent avec une minuscule tout comme le nom des méthodes!
 
Dans votre méthode "ChangerCap" pourquoi créez vous un nouvel objet "Combat"? vous êtes déjà dans un objet "Combat".
 
Le problème que j'identifie est que dans "ChangerCap" vous instanciez un objet "Combat", vous appellez la méthode "ChoisirCap" sur cette instance, et de retour dans "ChangerCap" vous lisez l'attribut de l'instance courrante et non de l'instance créée.
 
Un code un peu trop confus,
 
Bon courage tout de même!
 
Cordialement,
 
Sébastien Millot

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed