Java:tirage un mot aleatoire d'une phrase

marenila -  
 domxaline -
Bonjour,
but de mon prg est
l'utlisateur saisie une phrase,puis le prg affiche les mots de cette phrase dans un ordre pris par hasard

j'ai ecris ainsi:
package Mypackage;
import java.util.Random;
import java.util.Scanner;
import com.sun.org.apache.xalan.internal.xsltc.compiler.Pattern;
public class autre 
{
 public static void main(String[]args)
 {
	String phrase=new String();
	Scanner sc=new Scanner(System.in);
	System.out.println("Saissisez une phrase");
	phrase=sc.nextLine();
	String[] mots = Pattern.compile("\\w+" ).split(phrase);
	Random r = new Random(); 
    String motAleatoire = mots[r.nextInt(mots.length)];
 }
}


mais j'ai erreur lors compilation:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method compile(ClassGenerator, MethodGenerator) in the type Expression is not applicable for the arguments (String)

at Mypackage.autre.main(autre.java:14)
aidez moi,pour resoudre mon problem,s'il vous plaît
Configuration: Windows Vista
Firefox 3.5.3

6 réponses

  1. danimo
     
    Salut,

    import java.util.Random;
       import java.util.Scanner;
       //import com.sun.org.apache.xalan.internal.xsltc.compiler.Pattern;
       import java.util.regex.*;
       
        public class autre
       {
           public static void main(String[]args)
          {
             String phrase=new String();
             Scanner sc=new Scanner(System.in);
             System.out.println("Saisissez une phrase:");
             phrase=sc.nextLine();
             //String[] mots = Pattern.compile("\\w+" ).split(phrase);
             String[] mots = Pattern.compile("\\W+" ).split(phrase);
             for (int i = 0; i < mots.length; i++)
                System.out.println ("mot " + (i+1) + ": " + mots[i]);
                
    // On crée un tableau des mots aléatoires en controlant que le mot obtenu n'y est pas  et ce, 
    // tant qu'ils ne sont pas tous ajoutés
             String[] lesMotsAleatoires = new String[mots.length];
             boolean encore = true;
             int i1 = 0;
             int i2 = 0;
             int iSv = 0;
             int ctrMotAleatoire = 0;
          	
             while (encore)
             {
                //encore = false;
                for (i1 = iSv; i1 < mots.length; i1++)
                { 
                   Random r = new Random();
                   String motAleatoire = mots[r.nextInt(mots.length)];
                
                   System.out.println("\nLe mot aleatoire obtenu: " + motAleatoire);
                   //On verifie si le mot aléatoire est déja dans le tableau
                   for (i2 = 0; i2 < mots.length; i2++)
                   { 
                      if (motAleatoire == lesMotsAleatoires[i2]) // déja créé
                      {
                         iSv = i1;
                         break; // on passe au mot aléatoire suivant
                      }
                      else
                      {
                         //System.out.println("i2 = " + i2);
                         if ((i2) == mots.length -1)
                         {
                            ctrMotAleatoire++;
                            System.out.println("\n>>>>>> Le mot aleatoire créé: " + motAleatoire);
                            lesMotsAleatoires[ctrMotAleatoire -1] = motAleatoire;  //on crée
                            if (ctrMotAleatoire == mots.length) // c'est le drenier
                            {
                               encore = false;
                               break;
                            }
                         }
                      }
                   } 
                }
             }
          	// Resultat:
             System.out.println("\nLES MOTS ALEATOIRES:\n");
             for (int iR = 0; iR < mots.length; iR++)
             {
                System.out.println((iR + 1) + ": " + lesMotsAleatoires[iR]);
             }
          }
       }


    Cordialement,

    Dan
    1
  2. danimo
     
    Salut,

    import java.util.Random;
       import java.util.Scanner;
       //import com.sun.org.apache.xalan.internal.xsltc.compiler.Pattern;
       import java.util.regex.*; //<<<<<<<<<<<<<<<<<<
       
        public class autre
       {
           public static void main(String[]args)
          {
             String phrase=new String();
             Scanner sc=new Scanner(System.in);
             System.out.println("Saissisez une phrase");
             phrase=sc.nextLine();
             //String[] mots = Pattern.compile("\\w+" ).split(phrase);
             String[] mots = Pattern.compile("\\W+" ).split(phrase); //<<<<<<<<<<<<<<<<<
    
             Random r = new Random();
             String motAleatoire = mots[r.nextInt(mots.length)];
             System.out.println(">>>>>>>>>>> " + motAleatoire);
          }
       }


    Cordialement,

    Dan
    0
  3. domxaline
     
    bonjour
    j"ai besoin encore ton aide,
    je veux que le prg s'affiche jusqu'à fin des mots;c'est à dire
    ex:utilisateur a entrée une phrase "je suis en vacances"
    premiere fois on clique sur entrée prg affiche un mot et ensuite entrée cliqué un autre mot ainsi de suite, jusqu'a fin des phrase

    package Mypackage;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.regex.*; 
    public class autre 
    {
     public static void main(String[]args)
     {
    	String phrase=new String();
    	Scanner sc=new Scanner(System.in);
    	System.out.println("Saissisez une phrase");
    	phrase=sc.nextLine();
    	String[] mots = Pattern.compile("\\W+" ).split(phrase); 
    	Random r = new Random(); 
        String motAleatoire = mots[r.nextInt(mots.length)];
        int[]tab=new int[];
        for(int i=0;i<tab.length;i++)
        {
        System.out.println(" " + motAleatoire);
        }
     }
    }
    

    en compilant j'ai erreur suivant
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Variable must provide either dimension expressions or an array initializer

    at Mypackage.autre.main(autre.java:16)
    0
  4. domxaline
     
    j'ai corrigé cette ligne

    int[]tab=new int[5]; 


    resultat est suivant:
    Saissisez une phrase:
    je suis en vacances
    je
    je
    je
    je
    je

    mais je veux diffèrent mot chaque fois quand je clique
    sur le touche entrée
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. java4ever
     
    Bonjour Marenila,
    J'ai un peu amélioré le programme, je ne sais pas s c'est exactement ce que tu veux, mais voici le résultat de l'exécution :
    Saissisez une phrase
    bonjour le monde des petits elephants gentils
    idxc : 2 monde
    idxc : 4 petits
    idxc : 6 gentils
    idxc : 1 le
    idxc : 5 elephants
    idxc : 3 des
    idxc : 0 bonjour
    Et voici le code
    package mypackage;
    
    import java.util.ArrayList;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.regex.*;
    /**
     * Un classe avec métode main qui demande la saisie d'une phase,
     * la découpe en mots, puis affiche chacun des mots dans un ordre 
     * aléatoire
     */
    public class Autre {
     public static void main(String[]args)
     {
    	String phrase=new String();
    	Scanner sc=new Scanner(System.in);
    	System.out.println("Saissisez une phrase");
    	phrase=sc.nextLine();
    	String[] mots = Pattern.compile("\\W+" ).split(phrase); 
    	Random r = new Random(); 
        String motAleatoire = null;
        // pour être sûr que chaque mot de la phrase sera ecrit une fois
        // on enregistre les index déjà pris dans un Arraylist
        ArrayList<Integer> dejaPris = new ArrayList<Integer>();
        Integer nouvelIdx = null;
        // On va boucler jusqu'à avoir écrits tous les mots de la phrase
        while(dejaPris.size() < mots.length)
        {
          // L'index du mot
          nouvelIdx = r.nextInt(mots.length);
          if (!dejaPris.contains(nouvelIdx))
          {
        	  // On ajoute l'index dans la liste des déjà pris
        	  dejaPris.add(nouvelIdx);
              motAleatoire = mots[nouvelIdx];   
              System.out.println("idxc : " + nouvelIdx + " " + motAleatoire);
          }
        }
     }
    }
    

    Bon courage
    0
  7. domxaline
     
    merci beaucoup pour vos aides
    0