Bonjour erreur de compile qui doit sûrement être basique...

Résolu/Fermé
myrmounet Messages postés 11 Date d'inscription vendredi 22 août 2014 Statut Membre Dernière intervention 22 avril 2021 - Modifié par KX le 10/01/2017 à 06:52
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 23 janv. 2017 à 19:31
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);
  }
}}



3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 janv. 2017 à 06:58
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.
https://forums.commentcamarche.net/forum/affich-30695075-pourriez-vous-m-aider-dans-mon-ebauche-du-jeu-de-la-vie-deconway
0
myrmounet Messages postés 11 Date d'inscription vendredi 22 août 2014 Statut Membre Dernière intervention 22 avril 2021
11 janv. 2017 à 08:49
<gras>merci je retourne coder<!gras>
0
myrmounet Messages postés 11 Date d'inscription vendredi 22 août 2014 Statut Membre Dernière intervention 22 avril 2021
Modifié par KX le 13/01/2017 à 20:42
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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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.");
}
0
myrmounet Messages postés 11 Date d'inscription vendredi 22 août 2014 Statut Membre Dernière intervention 22 avril 2021 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
15 janv. 2017 à 23:56
merci KX
0
myrmounet Messages postés 11 Date d'inscription vendredi 22 août 2014 Statut Membre Dernière intervention 22 avril 2021
20 janv. 2017 à 17:01
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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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.
0
myrmounet Messages postés 11 Date d'inscription vendredi 22 août 2014 Statut Membre Dernière intervention 22 avril 2021
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 !
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
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);
0