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
A voir également:

6 réponses

Utilisateur anonyme
 
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
Utilisateur anonyme
 
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
domxaline
 
merci beaucoup pour vos aides
0