Projet BlueJ - Problème avec Math.random
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Projet BlueJ - Problème avec Math.random



  1. #1
    inviteb9446931

    Talking Projet BlueJ - Problème avec Math.random


    ------

    Bonjour, je suis en train de programmer un petit jeu Java à l'aide de BlueJ: un bonhomme qui doit manger des pommes dans un petit labyrinthe.
    J'ai mis un Math.random() pour que les pommes soient placées aléatoirement dans la fenêtre, mais la première pomme est toujours placée en haut à gauche, au point (0;0)... Comment faire pour que même la première pomme soit placée aléatoirement?

    Voici ce que j'ai écrit:

    int xf = (int) ( Math.random() * getWidth() );
    int yf = (int) ( Math.random() * getHeight() );
    pomme1 = new Rectangle( xf, yf, 5, 5 );


    Merci !

    -----

  2. #2
    zoup1

    Re : Projet BlueJ - Problème avec Math.random

    T'es sur que c'est pas getWidth() et getHeight() qui te renvoies 0 au moment où tu fais l'appel ?


    Sinon tu peux aussi utiliser la class java.util.Random qui te permet d'initialiser une graine (seed) mais aussi de renvoyer un int entre 0 et la valeur que tu veux ; public int nextInt(int n)
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  3. #3
    inviteb9446931

    Re : Projet BlueJ - Problème avec Math.random

    Je n'ai jamais utilisé la class java.util.Random, tu peux m'expliquer un peu comment l'utiliser ?

  4. #4
    zoup1

    Re : Projet BlueJ - Problème avec Math.random

    Citation Envoyé par Nadex34 Voir le message
    Je n'ai jamais utilisé la class java.util.Random, tu peux m'expliquer un peu comment l'utiliser ?
    Voilà par exemple ;
    Code:
    int Nb= 10;
    Random r = new Random();
    for (int i=0; i<Nb;i++)
    {
        int nombre = (r.nextInt(70)+80);
        System.out.println(nombre);
    }
    Cela vient de là : http://www.developpez.net/forums/d26...l/random-java/
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  5. A voir en vidéo sur Futura
  6. #5
    inviteb9446931

    Re : Projet BlueJ - Problème avec Math.random

    Merci beaucoup ! Bonne journée !

  7. #6
    invite2d7144a7

    Re : Projet BlueJ - Problème avec Math.random

    Bonjour,
    Citation Envoyé par Nadex34 Voir le message
    Je n'ai jamais utilisé la class java.util.Random, tu peux m'expliquer un peu comment l'utiliser ?
    La JavaDoc existe, elle est là pour être utilisée.

    En la regardant au plus quelques minutes, tu aurais eu ta réponse beaucoup plus vite.

  8. #7
    invite770d9cfe

    Re : Projet BlueJ - Problème avec Math.random

    Sur le site en question, je ne suis pas trop d'accord avec l'assertion selon laquelle
    Il n'y a rien de réellement aléatoire en informatique
    .

    Si la fonction random() est initialisée sur le timer de la machine (donc sur son oscillateur), alors on ne peut plus parler de pseudo-aléatoire, car sa valeur est unique et croissante dans le temps.

    Et le tirage aléatoire effectué à partir de cette valeur ne peut être qu'unique.

    En C : srand( (unsigned)time( NULL ) );
    En VB : ne pas utiliser rnd() avant d'avoir placé la ligne d'instruction randomize timer

  9. #8
    invite2d7144a7

    Re : Projet BlueJ - Problème avec Math.random

    Bonjour,
    Citation Envoyé par TiClic Voir le message
    Sur le site en question, je ne suis pas trop d'accord avec l'assertion selon laquelle .

    Si la fonction random() est initialisée sur le timer de la machine (donc sur son oscillateur), alors on ne peut plus parler de pseudo-aléatoire, car sa valeur est unique et croissante dans le temps.

    Et le tirage aléatoire effectué à partir de cette valeur ne peut être qu'unique.

    En C : srand( (unsigned)time( NULL ) );
    En VB : ne pas utiliser rnd() avant d'avoir placé la ligne d'instruction randomize timer
    Et pourtant, c'est bel et bien pseudo-aléatoire.

    Que tu n'obtiennes pas la même suite avec des instants d'initialisation différents n'empêche pas que la génération est en elle-même pseudo-aléatoire : un nouveau tirage dépend directement du tirage précédent, et n'a donc rien d'aléatoire. C'est pour cela qu'on initialise avec une valeur basée sur l'horloge, sinon on obtiendrait toujours la même suite.

  10. #9
    invite770d9cfe

    Re : Projet BlueJ - Problème avec Math.random

    Et pourtant, c'est bel et bien pseudo-aléatoire
    Si c'est un pseudo, cela signifie que si je te donne un tirage de 100 lettres (A-Z) et un 2e tirage de 99 lettres (A-Z) tu peux deviner la lettre qui manque ?

  11. #10
    invite2d7144a7

    Re : Projet BlueJ - Problème avec Math.random

    Bonjour,
    Citation Envoyé par TiClic Voir le message
    Si c'est un pseudo, cela signifie que si je te donne un tirage de 100 lettres (A-Z) et un 2e tirage de 99 lettres (A-Z) tu peux deviner la lettre qui manque ?
    Tu es à côté de la plaque, en confondant ce que je suis capable de déduire et ce que la machine génère.
    En connaissant l'algorithme utilisé, il est facile de trouver la suite qui sera générée à partir d'une valeur d'initialisation, quelle qu'elle soit.

    L'algorithme de génération est pseudo-aléatoire, et tu peux en dire ou penser tout ce que tu veux, c'est comme ça.

    Amuse-toi à toujours ton générateur initialiser avec la même valeur, et tu verras toujours la même suite de nombres.
    Si tu appelles ça aléatoire, revois ta compréhension de ce terme.

  12. #11
    invite770d9cfe

    Re : Projet BlueJ - Problème avec Math.random

    Il y a un truc que je ne comprends pas bien et que je n'ai probablement jamais compris.

    Je viens de lancer un petit programme qui initialise le premier tirage sur l'horloge interne de mon PC et tire ensuite de façon "pseudo-aléatoire" (si tu veux) des chaînes de 20 caractères. Je t'en donne le résultat :

    Code:
    FHNVNRUABRUAIKOPNJHT
    DKPORMUALUHOZDRHHRQZ
    URIZAUYLYJOYLAGEARIA
    RQZRDZALIFDEEABMHSEZ
    LHKUYHEHGPYBYQOHCRFH
    NNNBOMSOBIKUMWJJOMNJ
    RAHEEZGXIXYWTYWGKVXG
    FAVJMYFSEYKZUTZLHAEB
    DNUEZSJFDWHPSZOFTHNU
    RWBRYOSWDAMHAGMIADEM


    Le tirage du 1er caractère des lignes 1 et 8 est le même (1 chance sur 26 dans A-Z). Pourtant sur ces deux lignes, le 2e caractère est différent. Si les tirages étaient calculés à partir du tirage initial, donc le premier, je crois que les chaînes en rouge devraient être identiques, et celles en bleu aussi.

    Reprends ton explication et ne t'énerve pas comme tu viens de le faire, on apprend à tout âge et surtout au mien.

  13. #12
    invite2d7144a7

    Re : Projet BlueJ - Problème avec Math.random

    Bonjour,

    Le tirage précédent que tu utilises n'est pas celui calculé par le générateur, mais ce tirage ramené dans une fourchette de 26 valeurs, ce qui bien entendu réduit considérablement les possiblités de ton côté, mais pas pour le générateur, qui se souvient de la véritable valeur qu'il a obtenue, le reste étant réalisé par des calculs secondaires.

  14. #13
    invitec7217a00

    Re : Projet BlueJ - Problème avec Math.random

    Pour répondre à TiClic, on dit d'un générateur de nombres sur ordinateur qu'il est "pseudo-aléatoire" parce que si tu le lances au même instant sur deux ordinateurs parfaitement identiques, il générera la même valeur.
    Dès lors, il est possible de prédire la valeur qui sera générée.
    Cela a des conséquences notamment au niveau de la sécurité informatique (quand il faut générer des clef de cryptage pour des documents très importants).
    C'est pour ça qu'il existe de nombreux générateurs pseudo-aléatoires pour lesquels il est plus ou moins difficile de prédire la valeur qui sera générée.
    Il existe aussi des générateurs de nombres aléatoires, mais qui se rapprochent plus de la physique que de l'informatique.

  15. #14
    JPL
    Responsable des forums

    Re : Projet BlueJ - Problème avec Math.random

    Ces générateurs sont pseudo-aléatoires parce que les nombres qu'ils génèrent sont le résultat d'un algorithme et non d'un tirage au sort. Néanmoins ils "simulent" à peu près une distribution aléatoire et certains simulent cette distribution mieux que d'autres.
    Je me souviens d'une expérience que j'avais faite avec le générateur du Basic des IBM XT (ça remonte à très loin et on a fait des progrès depuis) : j'avais programmé la distribution des résultats sous forme de points sur un graphique en XY et on voyait qu'avec le réglage par défaut ceux-ci se distribuaient sous forme de bandes floues en diagonales parfaitement distinctes ! Autrement dit le générateur était largement biaisé.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  16. #15
    invite770d9cfe

    Re : Projet BlueJ - Problème avec Math.random

    D'un côté, j'accepte très facilement l'idée qu'un processeur n'ait pas assez de génie pour générer une série de chiffres purement aléatoire. Ce serait un effort contre nature, puisque le processeur est programmé pour obéir.

    D'un autre côté, je me dis que si le temps nécessaire à un processeur pour comprendre le problème qu'il a à traiter est infiniment trop long, alors je pense qu'on peut se contenter d'une solution "pseudo-aléatoire".

    Pour résumer, comment fonctionnent les machines à sous de nos casinos ?

Discussions similaires

  1. Problème sur un exercice de math de 1er S avec un triangle rectangle
    Par invite8198eb4c dans le forum Mathématiques du collège et du lycée
    Réponses: 16
    Dernier message: 19/01/2009, 10h26
  2. Problème de math avec des tangentes
    Par invite31309312 dans le forum Mathématiques du collège et du lycée
    Réponses: 12
    Dernier message: 10/09/2008, 21h53
  3. probleme avec un dm de math
    Par invite3a464913 dans le forum Mathématiques du collège et du lycée
    Réponses: 23
    Dernier message: 14/03/2007, 21h42
  4. probleme avec un exercice de math
    Par invitefd670d62 dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 06/03/2007, 12h36
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...