Programme Java
Résolu/Fermé
oliver3923
Messages postés
971
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
15 novembre 2014
-
Modifié par oliver3923 le 10/12/2011 à 11:35
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 - 10 déc. 2011 à 16:37
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 - 10 déc. 2011 à 16:37
A voir également:
- Programme Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Programme demarrage windows 10 - Guide
- Java décompiler - Télécharger - Langages
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
10 déc. 2011 à 13:31
10 déc. 2011 à 13:31
Je reprends ton code dans l'ordre où je l'ai sous les yeux :
1) Vu ce que tu cherches à faire, je te conseilles de conserver ObjetDamier abstract, mais cela ne t'empêche pas d'implémenter tout ou partie des méthodes qu'elle contient (une classe abstract ne contient pas forcément que des méthodes abstract)
2) Dans Jeton, getExplosion() doit renvoyer une valeur (un int) pour que cela compile.
3) Dans Bombe pareil avec getDirX, getDirY, getPV, et getDejaDePlace.
Remarque : typiquement des méthodes comme getDirX, et getDirY pourraient être implémenté par ta superclasse ObjetDamier.
4) Dans Obstacle, tu dois implémenter toutes les méthodes laissées abstract dans ObjetDamier, remarque : je te conseilles d'ajouter l'annotation @Override lorsque tu modifies une méthode héritée, cela te permet de mieux les distinguer des méthodes créées spécifiquement pour ta classe.
5) Pour ton erreur "should be declared in a file named Obstacle.java", je revérifierai encore une fois le nom de ton fichier (peut-être un espace qui se promène ou alors un Obstacle.java.java), éventuellement supprimes le et crées en un nouveau avec le bon nom.
6) Au vue de toutes tes erreurs j'imagine que tu n'utilises pas d'IDE (Eclipse, NetBeans...) c'est regrettable parce que toutes ses erreurs là tu les verrais immédiatement.
1) Vu ce que tu cherches à faire, je te conseilles de conserver ObjetDamier abstract, mais cela ne t'empêche pas d'implémenter tout ou partie des méthodes qu'elle contient (une classe abstract ne contient pas forcément que des méthodes abstract)
2) Dans Jeton, getExplosion() doit renvoyer une valeur (un int) pour que cela compile.
3) Dans Bombe pareil avec getDirX, getDirY, getPV, et getDejaDePlace.
Remarque : typiquement des méthodes comme getDirX, et getDirY pourraient être implémenté par ta superclasse ObjetDamier.
4) Dans Obstacle, tu dois implémenter toutes les méthodes laissées abstract dans ObjetDamier, remarque : je te conseilles d'ajouter l'annotation @Override lorsque tu modifies une méthode héritée, cela te permet de mieux les distinguer des méthodes créées spécifiquement pour ta classe.
5) Pour ton erreur "should be declared in a file named Obstacle.java", je revérifierai encore une fois le nom de ton fichier (peut-être un espace qui se promène ou alors un Obstacle.java.java), éventuellement supprimes le et crées en un nouveau avec le bon nom.
6) Au vue de toutes tes erreurs j'imagine que tu n'utilises pas d'IDE (Eclipse, NetBeans...) c'est regrettable parce que toutes ses erreurs là tu les verrais immédiatement.
oliver3923
Messages postés
971
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
15 novembre 2014
143
10 déc. 2011 à 14:07
10 déc. 2011 à 14:07
bonjour
d'abord merci pour tes réponses
je vais regarder pour les 4 premières remarques (je ne connaissais pas @override mais je vais le rajouter)
pour Obstacle.java j'ai verifié une dizaine de fois et j'ai déja essayé de supprimer la classe et de la recoder
est-il possible que cela vienne d'un autre bug comme ca arrive parfois
effectivement je n'utilise pas d'IDE je suis sur emacs
je te redis si j'arrive a améliorer tout ca
merci encore
d'abord merci pour tes réponses
je vais regarder pour les 4 premières remarques (je ne connaissais pas @override mais je vais le rajouter)
pour Obstacle.java j'ai verifié une dizaine de fois et j'ai déja essayé de supprimer la classe et de la recoder
est-il possible que cela vienne d'un autre bug comme ca arrive parfois
effectivement je n'utilise pas d'IDE je suis sur emacs
je te redis si j'arrive a améliorer tout ca
merci encore
oliver3923
Messages postés
971
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
15 novembre 2014
143
10 déc. 2011 à 14:45
10 déc. 2011 à 14:45
ca y est j'ai finit de rajouter tout ca est ca marche
l'erreur pour le nom du fichier a disparue (je ne sais pas pourquoi mais je ne vais pas me plaindre^^)
les dernières erreurs sont du a l'exécution (nullPointerException ou des trucs dans le genre)
merci beaucoup pour ton aide
l'erreur pour le nom du fichier a disparue (je ne sais pas pourquoi mais je ne vais pas me plaindre^^)
les dernières erreurs sont du a l'exécution (nullPointerException ou des trucs dans le genre)
merci beaucoup pour ton aide
oliver3923
Messages postés
971
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
15 novembre 2014
143
10 déc. 2011 à 15:04
10 déc. 2011 à 15:04
j'ai encore une question sur la suite
j'ai codé toutes mes classes et j'ai un problème avec mon nullPointerException
j'initialise deux variables aléatoirement pour avoir des coordonnées de ma matrice pour placer un jeton une bombe ou un obstacle et je vérifie si la matrice possède déja un objet sur cette case et le compilateur me renvoie nullPointerException
dans le if je compare un compteur de jeton au nombre de jeton demandé si tout les jetons sont la je fais pareil avec les obstacles pour avec les bombes
la fonction caseLibre :
je ne vois pas d'ou vient mon erreur
si la matrice est a null on renvoie vrai sinon on renvoie faux donc je ne vois pas pourquoi j'ai ce problème
cette fonction est quasiment identique a celle de la version précédente (la seule différence est qu'avant elle renvoyait vrai si la case était déja occupée) et elle marchait avant
j'ai codé toutes mes classes et j'ai un problème avec mon nullPointerException
j'initialise deux variables aléatoirement pour avoir des coordonnées de ma matrice pour placer un jeton une bombe ou un obstacle et je vérifie si la matrice possède déja un objet sur cette case et le compilateur me renvoie nullPointerException
l = (int)(Math.random() * NB_CASES_HAUT); c = (int)(Math.random() * NB_CASES_LARG); if (caseLibre(l, c)) {
dans le if je compare un compteur de jeton au nombre de jeton demandé si tout les jetons sont la je fais pareil avec les obstacles pour avec les bombes
la fonction caseLibre :
public boolean caseLibre(int l, int c) { return (matObj[l][c] == null); }
je ne vois pas d'ou vient mon erreur
si la matrice est a null on renvoie vrai sinon on renvoie faux donc je ne vois pas pourquoi j'ai ce problème
cette fonction est quasiment identique a celle de la version précédente (la seule différence est qu'avant elle renvoyait vrai si la case était déja occupée) et elle marchait avant
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
10 déc. 2011 à 15:28
10 déc. 2011 à 15:28
1) Il n'y a apriori pas d'erreur dans ces deux morceaux de code, il faudrait lire précisément l'exception pour savoir d'où cela vient, si tu m'avais dit IndexOutOfBoundsException encore j'aurais su, mais NullPointerException je ne vois aucune raison ici...
2) Au lieu de faire (int)(Math.random() * NB...); tu peux utiliser un objet Random et utiliser nextInt(NB...)
2) Au lieu de faire (int)(Math.random() * NB...); tu peux utiliser un objet Random et utiliser nextInt(NB...)
oliver3923
Messages postés
971
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
15 novembre 2014
143
10 déc. 2011 à 15:58
10 déc. 2011 à 15:58
Exception in thread "main" java.lang.NullPointerException at Damier.caseLibre(Damier.java:87) at Damier.initMat(Damier.java:56) at GoJeton.jeux(GoJeton.java:29) at JetonFou.main(JetonFou.java:32)
voici l'erreur complète
la ligne 87 correspond au retour de caseLibre dans mon poste d'avant
la ligne 56 correspond a son appel dans la condition
GoJeton ligne 29 correspond a l'appel de initMat() dans la fonction jeux() de GoJeton
et dans JetonFou c'est l'appel de la fonction jeux()
initMat() et la fonction que j'ai expliqué plus haut si tu veux le code complet je peux te le mettre ici mais il n'y a rien avant a part la déclaration des attributs et l'initialisation pour certains (les compteurs de jetons bombes et obstacles)
c'est pour ca que je ne vois pas ou est le problème
j'avais déja eu ce genre d'erreur dans la version précédente mais a chaque fois c'était une erreur d'indice j'essayais d'appeler une fonction de Jeton alors que j'étais sur une case qui n'en possédait pas
pour l'objet Random j'aurais pu effectivement mais je ne savais pas trop ce qui était le plus propre donc j'ai mis le plus simple
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
Modifié par KX le 10/12/2011 à 16:10
Modifié par KX le 10/12/2011 à 16:10
Les seules possibilités de NullPointerException sur cette ligne c'est que matObj==null ou matObj[l]==null
Utiliser nextInt c'est plus propre, ça évite de faire une conversion d'un double en int puisque cela te donne directement un nombre entier. En plus cela t'évite de faire la multiplication puisque l'entier sera choisi entre 0 et n-1 lorsque n est le paramètre que tu lui passes.
public boolean caseLibre(int l, int c) { if (matObj==null) System.err.printf("matObj est null"); else if (matObj[l]==null) System.err.printf("matObj[%d] est null",l); return (matObj[l][c] == null); }
Utiliser nextInt c'est plus propre, ça évite de faire une conversion d'un double en int puisque cela te donne directement un nombre entier. En plus cela t'évite de faire la multiplication puisque l'entier sera choisi entre 0 et n-1 lorsque n est le paramètre que tu lui passes.
oliver3923
Messages postés
971
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
15 novembre 2014
143
10 déc. 2011 à 16:15
10 déc. 2011 à 16:15
alors la j'avoue que je comprend pas ton code
comment fait tu pour comparer la matrice a null avec 0 ou 1 indice?
pour le random compris je changerai merci pour le conseil
comment fait tu pour comparer la matrice a null avec 0 ou 1 indice?
pour le random compris je changerai merci pour le conseil