Signaler

Bonjour erreur de compile qui doit sûrement être basique... [Résolu]

Posez votre question myrmounet 7Messages postés vendredi 22 août 2014Date d'inscription 23 janvier 2017 Dernière intervention - Dernière réponse le 23 janv. 2017 à 19:31 par KX
Bonjour,
Ici myrmounet la petite fourmi du net !
je suis en train d'essayer de fabriquer mon deuxième programme en java, et je fais face à un raz de marée sur la public static void main...
impossible de savoir ce qu'il arrive avec ce morceau de code !
pourriez vous m'aider, ô grande communauté?
merci d'avance !!!!
voilà le code que je viens de taper.



import java.util.Scanner;
public class jeudemots {
 char[] LettreInit =MotaDeviner[].toCharArray();
 int b;
 static char rep= '0';
 static int i;
 boolean Bravo= false;
public String Mot;{
 String str;
 char[] LettreResult=Mot.toCharArray();
 String MotaDeviner = str;
 int nbrDeLettres= MotaDeviner.length();
 char[] LettreInit=MotaDeviner.toCharArray();
 for (i=0;i<=nbrDeLettres;i++){
  if (LettreResult[i]==LettreInit[i])
  {LettreResult[i]=LettreInit[i];  
 }else {
  if (LettreResult[i]!='_'){
   LettreResult[i]='_';
 }}}}
public String Affichage(){

System.out.println("bonjour,\n\n\n\n\n\n\n\n\n\n");
 System.out.println("le mot plus les lettres bien devinées :");
 System.out.println("alors, voici : ");
 return Mot;
 }
public static void main (String args[]){

System.out.println("Bienvenue dans le jeu de folie qui se joue à deux!");
 System.out.println("Il s'agit de deviner un mot ! Tapez le(EN UN SEUL MOT)");
 Scanner sc = new Scanner(System.in);
 String str = sc.nextLine(); 
 while (rep!='o')
 {
  String Mot;
  String Affichage;
  System.out.println("Voulez vous arrêter? o = oui, n=non");
  String str2 = sc.nextLine(); 
  char rep = str2.charAt(0);
  }
}}



Afficher la suite 
Utile
+0
plus moins
Bonjour,

Commences déjà par mettre tout ton code dans des méthodes.
Les 20 premières lignes sont posées en vrac dans la classe ce qui ne peut pas marcher.

Inspires toi éventuellement de ton code précédent (ou de n'importe quel autre code) pour respecter la structure du programme.
http://www.commentcamarche.net/forum/affich-30695075
myrmounet 7Messages postés vendredi 22 août 2014Date d'inscription 23 janvier 2017 Dernière intervention - 11 janv. 2017 à 08:49
<gras>merci je retourne coder<!gras>
Répondre
Donnez votre avis
Utile
+0
plus moins
Bon, je m'y suis remis(à coder le jeu du pendu...)
et là, voici où j'en suis (il y a plein d'erreurs, même de raisonnement informatique, mais je ne sais plus vers où coder, je suis perdu, j'ai essayé plusieurs pistes en même temps et je vous donne mon code actuel comme ça, en vrac):

:-D
import java.util.Scanner;

public class jeudemots {
    static String MotaDeviner = "bonjour";
    static String MotTrouvé = "aurevoir";
    static int nbrDeLettres = MotaDeviner.length();
    static char rep = 'a';
    static int b;
    static String str;
    static int i;
    static char[] Motchar, Résultat;
    static char LettreTrouvée;
    static char LettreInit;
    static char LettreVide;

    public static void Devinette() {
        System.out.println(" joueur 2, quelle lettre?");
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char LettreTrouvée = str.charAt(0);
        sc.close();
        if (MotaDeviner.indexOf(LettreInit) != -1) {
            System.out.println("Une lettre de trouvée, même joueur joue encore !");
            for (i = 0; i <= nbrDeLettres; i++) {
                if (Motchar[i] == LettreTrouvée) {
                    LettreTrouvée = Résultat[MotaDeviner.indexOf(LettreTrouvée)];
                } else {
                    if (MotTrouvé.charAt(i) != '_') {
                        LettreVide = '_';
                    }
                }
            }
        } else {
            System.out.println("VOUS NAVEZ RIEN TROUVE on va la refaire...");
        }
    }

    public static void DébutduJeu() {
        System.out.println("Bienvenue dans le jeu de folie qui se joue à deux!");
        System.out.println("Il s'agit de deviner un mot ! Tapez le joueur 1(EN UN SEUL MOT ET DIX LETTRES MAXIMUM(par souci d'efficacité dans ce code)");
        Scanner sc = new Scanner(System.in);
        MotaDeviner = sc.nextLine();
        char[] Motchar = MotaDeviner.toCharArray();
        sc.close();

    }

    public static void main(String args[]) {
        DébutduJeu();
        for (i = 0; i <= 10; i++) {
            Devinette();
        }
        if (Résultat[] == Motchar[]) {
            System.out.println("BRAVO BIEN DEVINE");
            System.out.println("Fin du programme d'Olivier myrmounet la petite fourmi.");
        }
    }
}

voilà bande d'internautes(ou voir KX? lol, il a l'air un postman chevronné d'ici...)
Pourriez vous m'aider? S'il vous plait, je vous en prie.
Mais ne me donnez pas le code en vrac, juste une ou plusieurs pistes, pour que j'y arrive, je sais quand même que mon code ne compile pas, mais j'y ai essayé diverses pistes... bon je sais pas, ce code m'a quand même pris 4-5h d'apprentissage en surfant, donc je sais même pas quelle méthode utiliser pour mes objets String... je vous laisse, me guider.
voilà merci d'avoir pris la patience de me lire, en attendant,je vais aller regarder les informations à la tv.
bisous mdr
KX 14150Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 23 avril 2017 Dernière intervention - 14 janv. 2017 à 10:19
Bonjour,

Déjà, il n'y a aucune raison de mettre toutes tes variables au début du programme. Elles devraient toutes (sauf exception) être déclarées dans les méthodes qui les utilisent. Cela va t'obliger par contre à renvoyer un résultat dans tes méthodes, afin de pouvoir les réutiliser dans ton main.

Remarque : les conventions de nommage des variables et méthodes sont, première lettre en minuscule, majuscule au début des mots suivants, uniquement les lettres A-Z sans accent.

Exemple :

public static void main(String args[]) {
    String motADeviner = debutDuJeu();
    for (int i = 0; i <= 10; i++) {
        String motTrouve = devinette();
        if (motADeviner.equals(motTrouve)) {
            System.out.println("BRAVO BIEN DEVINE");
            break;
        }
    }
    System.out.println("Fin du programme d'Olivier myrmounet la petite fourmi.");
}
Répondre
myrmounet 7Messages postés vendredi 22 août 2014Date d'inscription 23 janvier 2017 Dernière intervention - 15 janv. 2017 à 23:56
merci KX
Répondre
Donnez votre avis
Utile
+0
plus moins
bon ! Encore deux questions pour programmer mon pendu en java SE..
j'ai mis la plupart de mes variables dans les méthodes adéquates, mais seulement pour certaines variables, je les ai mises static au début pour que leur portabilité dans le programme soit accessible dans plusieurs méthodes. Est-ce approprié?
et sinon, dans ma boucle qui vérifie(une boucle while) si le motTrouve est égal au motaDeviner, pour comparer les mots, en String, j'utilise un tableau de caractères, avec .toCharArray();, mais j'utilise une boucle for avec i ++ sur tous les caractères dudit tableau, et je ne comprends pas pourquoi cela ne marche pas, il m'affiche 4fois non c'est faux même quand la lettre est pas correcte.
Voilà, je suis un gros noob en java mais bon, il n'y a pas d'âge pour apprendre parait-il...
donc si quelqu'un, ou KX, pouvait m'aider??
merci d'avance !
myrmounet
KX 14150Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 23 avril 2017 Dernière intervention - 22 janv. 2017 à 18:38
certaines variables, je les ai mises static au début pour que leur portabilité dans le programme soit accessible dans plusieurs méthodes. Est-ce approprié?
A priori non. En java c'est l'objet qui doit porter l'état, pas la classe.

pour comparer les mots, en String, j'utilise un tableau de caractères, avec .toCharArray();, mais j'utilise une boucle for avec i ++ sur tous les caractères dudit tableau
Tu te compliques la vie, pour savoir si deux objets sont égaux il faut utiliser la méthode equals, ça fonctionne avec String comme pour n'importe quels types d'objets.
Répondre
myrmounet 7Messages postés vendredi 22 août 2014Date d'inscription 23 janvier 2017 Dernière intervention - 23 janv. 2017 à 15:50
ok pour la portabilité de java sur l'objet et non la classe, pour l'état de l'objet.(j'ai commencé la programmation en turbo pascal, donc peut-être ceci explique cela)
par contre je pense que si j'utilise equals sur un String dun mot à deviner, comment comparer lettre par lettre sans faire de tableau de caractères? car c'est un pendu, j'explique mieux, un mot tapé par un utilisateur doit être deviné par un autre utilisateur, lettre par lettre, et non le mot entier !!
String n'est pas divisible donc comment faire? charArray m'avait l'air bien, mais je suis en train d'apprendre à le manier.
KX, comment comparer une lettre proposée par l'utilisateur, à toutes les lettres du mot à deviner, et est-ce que le mot proposé peut contenir plusieurs fois la même lettre, mais cela parait compliqué avec indexOf il n'y a qu'une occurence de la lettre...
bref ça va mieux mais je reste dans le fog of war !
lol merci de votre lecture !
Répondre
KX 14150Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 23 avril 2017 Dernière intervention - 23 janv. 2017 à 19:31
"String n'est pas divisible"
Bien sûr que si, puisque tu peux accéder à chaque caractère avec
charAt(int)
par exemple, même si le
indexOf
que tu cites est une bonne idée.

"avec indexOf il n'y a qu'une occurence de la lettre"
En effet, la première. Cependant on peut ajouter un paramètre pour indiquer où commencer la recherche, et donc obtenir la première occurrence à partir d'un indice donné, donc en commençant après la première occurrence on peut obtenir la deuxième.

String word = "anticonstitutionnellement";
char letter = 't';
for (int n = word.indexOf(letter); n != -1; n = word.indexOf(letter, n + 1))
    System.out.println(n);
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !