Votre question

demande de conseil (java)

Tags :
  • Java
  • Programmation
Dernière réponse : dans Programmation
26 Mars 2008 23:40:12

bonjour tout le monde

est ce que vous pouver me proposer une idée comment créer une matrice binaire qui contient un nombre fixe de 1 je vais moi meme la developper
j'ai fait une mais le probleme ce qu'elle m'a donné une boucle infinie

merci

Autres pages sur : demande conseil java

a b L Programmation
27 Mars 2008 20:31:06

Tu mets tout à 0, et tu places les 1 en déterminant aléatoirement la position, et pas l'inverse.
27 Mars 2008 22:48:01

ça ne risque pas de donner à chaque fois la meme case?
on retombe dans le meme probleme ??
Contenus similaires
a b L Programmation
27 Mars 2008 23:27:19

Oui.
Si tu veux éviter ça, tu fais tout linéairement.
si ta matrice fait m*n, alors tu tires un nombre index aléatoire entre 0 et m*n-1 - (nombre de cases déjà trouvées).
A cet index, tu ajoutes le nombre de cases trouvées ayant un index inférieur à l'index que tu as trouvé (optimisable). Tu réitères cette dernière opération, car il se peut qu'il y ait des case trouvées entre l'index initial et le nouvel index. Tu réitères jusqu'à ce que l'index ne bouge plus (tout ça est probablement optimisable en ne faisant que des +1).
Enfin, pour connaitre la position dans ta matrice 2D:
y = index / m (division entière)
x = index % m (modulo ou reste de la division entière)
C'est classique c'est comme pour déterminer la position d'un pixel avec sa position dans le buffer d'écran.

De cette façon, tu ne choisis que parmi les cases à 0, et surtout tu choisis les cases de manière uniforme.

Une autre possibilité, plus lourde (pas optimisée du tout), mais plus simple à concevoir, c'est de faire une liste de toutes les cases et de choisir au hasard dans la liste. Chaque case trouvée est retirée de la liste pour ne pas la rechoisir.
28 Mars 2008 23:51:01

merci je vais essayer
mais je n'ai pas bien compris cet index comment le trouver ça me parrait un peu flou

pardon
a b L Programmation
29 Mars 2008 00:17:29

en fait, lors que tu as déjà choisis 5 cases, il te reste à choisir parmi m * n - 5 cases. Donc ton nombre aléatoire va de 0 à m * n - 5. C'est comme si tu numérotais les cases restantes et que tu choisi le numéro.
Si entre 0 et 10, tu as déjà choisi 2 cases, et que tu tombes au hasard sur la 11ème case libre, la 11ème case libre est en fait la 11 +2 = 13 ème case.
29 Mars 2008 00:41:00

normalemnt j'ai compris je vais essayer et vous repondre

merci
29 Mars 2008 23:50:47

voici le code que j'ai écrit est ce qu'il est juste sachant que mm est

new int[nba]
n2=0;
mm= new int[nba];
for (int k=0;k<=nba-1;k++)
{
mm[k]=-1;
}
for(int i=1; i<=nba;i++)
{

n1=0;
Random q1 = new Random();
a= q1.nextInt(((som*som/2)-som)-1-n2);
for(int j=0;j<=nba-1;j++)
{
if (mm[j]!=-1)
{
if (mm[j]<=a)
{
n1++;
}
}

}
index = a+n1;
mm[n2]=index;
n2++;

x = (int)index%som;
y = (int)index/som;
adjascence[x][y]=1;
adjascence[y][x]=1;
//mm[index]=1;

}

le probleme c'est que ça ne marche pas et le programme se bloque
a b L Programmation
30 Mars 2008 13:08:04

mm c'est quoi ? n1 c'est quoi ? n2 c'est quoi ? nba c'est quoi ? som c'est quoi ? ((som*som/2)-som)-1-n2 c'est quoi ?
30 Mars 2008 23:30:34

merci d'avoir répondre

n2 represente le nombre de case qu'on a choisi
n1 le nombre de case qui ont l'indexe inferieur à celui trouvé
nba le nombre de 1 que doit contenir la matrice sachant que dans la diagonle il n'y a que des 0

int [] mm = new int [nba]

mm contient l'index de la case trouver pour que je puisse le comparer apré
et elle est initialisée à -1

bn en plus la matrice est symetrique
donc je ne dois pas choisir la case dans toute la matrice mais seulement dans la partie sup ou inf et affecter le 1 à la case symetrique de celle trouvée
a b L Programmation
31 Mars 2008 20:10:14

Déjà, n'utilise pas n1, à chaque case inférieure, incrémente "a" (du coup, il faut que mm soit trié dans l'ordre), parce que si tu passe par n1 et que tu as par exemple n1=10, tu peux aussi avoir des cases déjà choisies entre a et a+10, et a+10 peut aussi être une case déjà choisie.
En modifiant "a", tu teste la prochaine case avec la nouvelle valeur de a décalée, et donc au final, tu prendras toutes les cases en compte.

Ensuite, le calcul de x et y n'est plus bon puisque tu as un triangle, le calcul est forcément différent.

Enfin, tu n'as pas besoin de n2, puisque "i" est déjà le nombre de cases trouvées, mais ça c'est pas grave.

Ceci dit, je ne vois pas pourquoi ton programme bloque. Tu as bien initialisé nba?
31 Mars 2008 23:02:23

merci j'ai fait la matrice voulue
j'ai pu créer une matrice binaire symétrique qui contient des 0 dans la diagonale et un nombre de 1 fixe
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS