2013-05-17 1 views
1

Je suis relativement nouveau dans Java et je voulais essayer de créer un code qui génèrerait 2 nombres aléatoires par nombre de fois, et il suivrait combien de fois les 2 nombres sont identiques. Ensuite, après X nombre de tentatives, il calculerait la chance de se produire.Tentative de création d'un calculateur de hasard

Nombre de randoms divisé par fois ils étaient les mêmes

import java.util.Random; 

public class RandomTest { 
    public static void main(String[] args) { 
     int[] anArray; 
    anArray = new int[100000]; 
    Random randomGenerator = new Random(); 
    for (int loop = 1; loop < 1000; loop++) { 
     int random1 = randomGenerator.nextInt(100); 
     int random2 = randomGenerator.nextInt(100); 
     if (random1 == random2) { 
      int number = number + 1; 
      countArray[number] = loop; 
     } 
     if (loop == 1000) { 
      System.out.println("Took " + loop + " randoms."); 
      break; 
     } 
     else {} 
     } 
    } 
} 

question principale semble être de tableau pour remplir et d'obtenir ints en/hors de la boucle.

+0

Vous trouverez qu'il est beaucoup plus facile de suivre votre propre code si vous indentez plus intelligemment. Pourquoi avez-vous un bloc "if" vide?Et quand pensez-vous que 'loop' sera jamais 1000 * dans la boucle *? –

+0

Pour quoi avez-vous besoin du tableau? Est-ce pour voir à quelle fréquence le groupe de deux chiffres correspond ('54 22 'correspond à '54 22'), ou à quelle fréquence les deux nombres correspondent ('22 22 ')? –

+0

En fait ** boucle ** ne sera jamais 1000 –

Répondre

0

Vous voulez sans doute faire quelque chose à ce sujet:

int number = number + 1; 

Pour parcourir le tableau, le numéro mis à zéro

int number = 0; 

avant d'entrer dans la boucle puis le numéro incrémenter avec

number = number + 1; 
+0

Bien que le bug soit évident pour tous ceux qui ont fait de la programmation (Java), il pourrait être plus utile pour les débutants si vous spécifiez ** ce qui ** devrait être fait pour cette ligne. La supériorité n'est pas cool. – adrianp

+0

Je n'essayais pas d'être supérieure, j'essayais de ne pas être condescendant. J'ai supposé que c'était une faute de frappe, pas un malentendu. – parkydr

4

Voici ma version de votre code:

import java.util.Random; 
import java.util.ArrayList; 

public class RandomTest { 
    public static void main(String[] args) { 
     ArrayList<Integer> duplicates = new ArrayList<Integer>(); 
     int random1 = 0, random2 = 0; 
     Random randomGenerator = new Random(); 
     for (int loop = 1; loop <= 1000; loop++) { 
      random1 = randomGenerator.nextInt(100); 
      random2 = randomGenerator.nextInt(100); 
      if (random1 == random2) { 
       duplicates.add(new Integer(random1)); 
      } 
     } 

     for (Integer i : duplicates) { 
      System.out.println("Duplicate: "+i.toString()); 
     } 
    } 
} 

Il y a un certain nombre de problèmes que votre solution contient:

int number = number + 1; 

Le ci-dessus créent un nouveau numéro appelé int et lui donner la valeur NULL + 1, cela est parce que le ci-dessus peut être divisé en deux lignes:

int num; 
num = num + 1; 

La première ligne réservera de l'espace mémoire pour une variable appelée num. La deuxième ligne va essayer de mettre la valeur de (num + 1) en num. Comme nous appelons num et qu'il n'a pas été initialisé - cela nous donnera un java.lang.Error (au moins c'est ce que j'ai eu).

Donc, comme vous pouvez le voir, mettre le numéro en dehors de la boucle et initialisant comme ceci:

int number = 0; 
for (int loop = 1; loop <= 1000; loop++) { 
    number = number + 1; 
} 

incrémente la valeur du nombre de 1, 999 fois.

Ce qui m'amène au point suivant. La boucle for ne fera jamais loop = 1000 car la condition arrêtera la boucle avant que la condition ne soit vraie, donc quand la boucle for finit, loop sera égal à 999. Si vous voulez que la boucle se termine sur loop = 1000, vous devez utiliser loop <= 1000. De même, la condition if n'est pas nécessaire car lorsque la boucle se termine, elle continue avec le reste du code en dessous.

Je n'ai pas du tout utilisé number dans ma solution, parce que j'ai utilisé un ArrayList, qui est essentiellement une version beaucoup plus avancée d'un tableau qui peut se développer dynamiquement et faire plein d'autres choses intéressantes. Malheureusement ArrayLists doit contenir des objets, donc j'enveloppe chaque int dans un objet Integer et c'est bien. À la fin, j'utilise une boucle for pour parcourir la liste des doublons, pour chaque résultat je l'imprime.

Espérons que cela aide et si vous avez des questions n'hésitez pas à commenter ci-dessous.

+0

Merci beaucoup, c'est génial. Je vais passer en revue toutes les choses que vous avez mentionnées. – user2393883

+0

Si vous avez aimé ma réponse, veuillez l'accepter comme réponse officielle à la question. – Rossiar

Questions connexes