CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Aide melange de tableau

lefandeff9
lefandeff9
Niveau 10
23 mai 2017 à 20:12:33

Bonjour,
Je suis actuellement entrain de faire un code afin de faire un mot magique mais je suis bloqué, je dois en gros faire en sorte que l'utilisateur tape un mot puis les lettres sont mélangé, puis il ressort avec les lettres mélanger et avec quelques lettres ajoutées (un peu pour piéger).
Pour j'ai alors fait en sorte que le mot soit découpé lettres par lettres et mis dans un tableau ais la je bloque sur internet ce que j'ai vu ne m'a pas aidé.
Voila mon code :
import java.util.Scanner;

public class Main {
public static void main(String args[]) {

String[] splitArray = null;
String pass = "";

Scanner scan = new Scanner(System.in);

System.out.println("Veuillez saisir un mot :");

String str = scan.nextLine();

System.out.println("Patientez..");

splitArray = str.split("");

for(int i = 0; i< splitArray.length;i++){

int x = (int)Math.floor(Math.random() * splitArray.length);
pass += str.charAt(x);

System.out.println("La lettre n° " + i + " est [" + splitArray[i]+"]");
}
}
}

Azmurael
Azmurael
Niveau 10
23 mai 2017 à 20:41:07

Soyez plus clair lorsque vous demandez de l'aide s'il vous plait. :(
Qu'est ce qui ne marche pas ? Le code compile ? Le programme ne fait pas ce qu'il devrait faire ?
SOYEZ CLAIR LORSQUE VOUS POSEZ UNE QUESTION. (et utilisez le balises merci) Passons. Ensuite pour ce qui est de mélanger ton tableau, tu peux soit utiliser Collections (je te laisse cherche comment ça marche), soit tu peux l'implémenter. Un exemple d'implémentation : <code> string[] ar = "abcdef".split("") for (int i = ar.length - 1; i > 0; i--) { int index = (int)(Math.floor(Math.random()*i)+1) // On échange String a = ar[index]; ar[index] = ar[i]; ar[i] = a; }
Ca ressemble un peu à ce que tu as essayé de faire. Mais en faisant commencer mon index à la fin et en modifiant directement la valeur du tableau, j'évite de m'embeter avec l'immutabilité des String.
Le code n'a pas été testé. Il se peut qu'il y ait des erreurs. Corrigez moi si vous en voyez.

lefandeff9
lefandeff9
Niveau 10
23 mai 2017 à 21:11:20

AH autant pour moi, en gros j'en suis à l'étape ou je dois mélanger les éléments de mon tableau j'ai donc fais des recherche sur internet mais je n'ai pas compris ce que j'ai trouver du coup en essayant de l'intégré a mon code il n'y a pas eu de resultat.

Du coup la j'ai essayé votre code mais il y a une erreur de compilation qui dit : "The type of the expression must be an array type but it resolved to int"

mon nouveau code :
<code>
import java.util.Scanner;
import java.util.Arrays;

public class Main {
public static void main(String args[]) {

String[] splitArray = null;
String pass = "";

Scanner scan = new Scanner(System.in);

System.out.println("Veuillez saisir un mot :");

String str = scan.nextLine();

System.out.println("Patientez");

splitArray = str.split("");

for(int i = splitArray.length - 1; i< 0;i--){
int s = 0;
int index = (int)(Math.floor(Math.random()*i)+1);
String a = splitArray[index];
splitArray[index] = s[i];
splitArray[i] = a;

System.out.println("La lettre n° " + i + " est [" + splitArray[i]+"]");
}
}
} <code>

Message édité le 23 mai 2017 à 21:12:09 par lefandeff9
Azmurael
Azmurael
Niveau 10
23 mai 2017 à 21:19:30

La ligne
splitArray[index] = s[i];
devrait être
splitArray[index] = splitArray[i];
Evite de copier du code que tu ne comprends pas. Si tu veux plus d'explication, n'hésite pas.

lefandeff9
lefandeff9
Niveau 10
23 mai 2017 à 21:47:02

Oui enfaite j'aimerais bien des explications sur tout la boucle for du code, si j'ai bien compris un nombre est généré, qui désigne une case du tableau et c'est cette case que l'on va échanger ?

J'ai changé la ligne mais maintenant mon tableau ne s'affiche plus :
<code>
import java.util.Scanner;
import java.util.Arrays;

public class Main {
public static void main(String args[]) {

String[] splitArray = null;
String pass = "";

Scanner scan = new Scanner(System.in);

System.out.println("Veuillez saisir un mot :");

String str = scan.nextLine();

System.out.println("Waouw bien vu !");

splitArray = str.split("");

for(int i = splitArray.length - 1; i< 0;i--){
int s = 0;
int index = (int)(Math.floor(Math.random()*i)+1);
String a = splitArray[index];
splitArray[index] = splitArray[i];
splitArray[i] = a;
System.out.println("La lettre n° " + i + " est [" + splitArray[i]+"]");
}
}
}
<code>

Message édité le 23 mai 2017 à 21:47:24 par lefandeff9
Azmurael
Azmurael
Niveau 10
23 mai 2017 à 22:32:30

/* Les string sont immutables en Java, donc convertit ça en tableau */
string[] ar = "abcdef".split("")
/* On fait commencer la boucle à l'index i, qui est la dernière case de notre tableau qui représente notre mot. On arrete la boucle quand i vaut 0, ce qui correspond à la première case de notre tableau */
for (int i = array.length - 1; i > 0; i--)
{
/* On calcule un index aléatoire entre 0 et i */
int index = (int)(Math.floor(Math.random()*(i+1))
/* On stocke la valeur de la case à la position index du tableau dans la variable a */
String a = array[index];
/* On échange les lettres aux positions i et index */
array[index] = array[i];
/* On met la valeur de a dans la case i  du tableau */
array[i] = a;
/* On recommence */
}

Comme on modifie le tableau en descendant (càd de l'index de la dernière case vers l'index de la première case), une fois qu'on a permuté un élément, on est assuré de ne plus y toucher.

Petite illustration avec un tableau de 4 élements :
array = "abcd"
/* Première itération */
i = 3
On tire au hasard 1.
On échange b et d dans notre array.
array = "adcb"
b est fixé et ne sera plus jamais mélangé.
/* Deuxième itération */
i = 2
On tire au hasard 0
On échange a et c
array = "cdab"
a et b sont fixés et ne seront plus jamais mélangés
/* Troisième itération */
i = 1
On tire au hasard 1
On permute d et d
array = "cdab"
etc...

Enfin, pour ce qui est de l'affichage, tu peux recreer une String à partir de ton tableau de String[] avec String.join("", splitArray). Tu peux ensuite l'afficher avec println.
Enfin, ca fait un moment que j'ai pas fait de Java, mais ca devrait marcher.

lefandeff9
lefandeff9
Niveau 10
23 mai 2017 à 22:46:30

D'accord merci beaucoup sa m'a beaucoup aidé :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment