2016-04-18 1 views
0

Je crée une carte matricielle simple. J'essaie de faire apparaître le caractère '$' 10 fois dans des endroits aléatoires, et 'R' n'apparaissent qu'une fois dans des endroits aléatoires. J'ai continué à changer la randomisation, mais je sais que je m'approche de la mauvaise façon. Les caractères apparaissent dans des endroits aléatoires et dans des quantités aléatoires. Editer: J'ai oublié de mentionner que j'essaie de maintenir ma boucle imbriquée for. Edit: J'ai placé mes dernières instructions if que j'ai essayées dans le code au lieu de mes espaces réservés.Placement de caractères aléatoires sur une carte matricielle en Java

Voici mon code:

import java.util.*; 
public class board 
{ 
    public static void main(String[] args) 
    { 
     char $; 
     char R; 
     char board[][] = new char[10][10]; 

     for(int x = 0; x < board.length; x++) 
     { 
      for(int i = 0; i < board.length; i++) 
      { 
       double random = Math.random(); 
       if(random >.01 && random <=.10) 
       { 
        board[x][i] = 'R'; 
       } 
       else if(random > .01 && random <= .15) 
       { 
        board[x][i] = '$'; 
       } 
       else { 
        board[x][i] = '.'; 
       } 
       System.out.print(board[x][i] + " "); 
      } 
      System.out.println(""); 
     } 
    } 
} 
+3

Les deux premières instructions conditionnelles sont identiques. –

+0

Vos deux premières conditions «si» sont identiques et seule la première sera évaluée. –

+0

C'était un produit de ma frustration plus tôt. J'ai foiré quelque chose en essayant de réparer des choses et j'ai fini par les laisser à la fois les mêmes que les titulaires de places. Cependant, aucune des randomisations que j'ai essayées n'a fonctionné. Toutes mes excuses pour la confusion. – user6217303

Répondre

1

Vous ne serez pas mise au hasard par itérer sur toutes les positions et à comparer à une probabilité. Que se passe-t-il si trop sont placés ou pas assez? Un meilleur algorithme est de générer des positions aléatoires jusqu'à ce que vous en ayez assez sur le plateau. Quelque chose comme:

while (count < target) { 
    int x = rand.getInt(size); 
    int y = rand.getInt(size); 
    if (board[x][y] == '.') { 
     board[x][y] = '$'; 
     count++; 
    } 
} 

Ce sautera automatiquement les positions qui ont déjà été attribués le caractère et continueront jusqu'à ce que suffisamment ont été placés.

Cela peut être transformé en une méthode qui est utilisée pour les deux stages:

private void place(char toPlace, int target) { 
    int count = 0; 
    while (count < target) { 
     int x = rand.getInt(size); 
     int y = rand.getInt(size); 
     if (board[x][y] == '.') { 
      board[x][y] = toPlace; 
      count++; 
     } 
    } 
} 

place('M', 1); 
place('$', 10); 
+0

Mais suis-je capable de préserver ma boucle 'for' imbriquée avec ça? J'ai édité mon post il y a un peu de temps. Je suis désolé, je suis très nouveau, et je ne vois pas comment intégrer cela sans perdre cela. – user6217303

+0

Etes-vous sûr que vous devez gérer la boucle for imbriquée? Si vous le faites, la seule façon de le faire serait de prédéterminer les positions où vous allez placer chaque jeton (en utilisant une méthode similaire à celle de cette solution élégante), puis, lorsque vous bouclez, utilisez le positions prédéterminées pour mettre à jour votre conseil. – GHC

+0

Je n'en ai pas besoin, mais pour ce code, j'essaie de garder la boucle 'for'. – user6217303

0

Ce qui se passe est qu'il place aléatoirement, mais vous avez pas de code qui contrôle le nombre sont générés. Vous devriez avoir un compteur pour $ et un compteur pour R, et quand vous en avez assez, il ne devrait plus imprimer ce caractère. En outre, le code actuel peut remplacer les caractères précédemment placés. Vous devriez probablement ajouter une instruction if qui vérifie la valeur actuelle de l'adresse sur le point d'être remplacée, et assurez-vous qu'elle est vide en premier.

+0

Ok. Je vais essayer ça. Je vous remercie. – user6217303

+0

Pas de problème! N'oubliez pas d'accepter cette réponse si cela vous a aidé! – coolioasjulio