Remplir 1 tab avec random sans doublon java

Fermé
muntu - 16 juil. 2010 à 09:05
bigmanes Messages postés 11 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 19 juillet 2010 - 19 juil. 2010 à 03:51
Bonjour,

J'ai fait un programme qui doit remplir mon tableau à deux dimension aléatoirement, mais sans doublon. Donc les nombres générés par mon random aléatoirement doivent être unique dans mon tableau. Si le nombre généré se trouve déjà dans le tableau, je le met pas dans mon tableau et je génère un autre nombre. J'enregistre seuls les nombres qui ne sont pas encore enregistrés.

Pour cela j'ai fait un programme, je sais que je dois faire une recherche dans mon tableau pour vérifier. Seulement mon programme marche à moitié car lorsque la taille de mon tableau est très grand, je vois k'il y a des doublons. Donc un petit truc m'échappe dans mon code.

S'il vous plait aidez moi, et dites moi ce k je dois modifier.
Le code est déjà compilé. Et s'il y a moyen de faire plus court, faites le moi savoir.

Merci d'avance.

Voici mon code source :

import java.util.*;
public class test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub


int ma_variable = 0;
int temp =0;
int count=0;
int count1 =0;
Scanner sc = new Scanner(System.in);

System.out.println("Veuillez taper la valeur des champs du tableau SVP");

ma_variable = sc.nextInt();

int tab[][] = new int[ma_variable][ma_variable];

int mavariable = ma_variable*ma_variable;


System.out.println("Le contenu du tableau est :");

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

{
for(int j=0; j<tab.length; j++)

{ tab[i][j]= 0; }

}



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

{
for(int j=0; j<tab.length; j++)

{


Random r = new Random();
int valeur = 1 + r.nextInt(16);

for(int k=0; k<tab.length; k++)

{
for(int l=0; l<tab.length; l++) {

do
{

if(tab[k][l]==valeur) {


Random n = new Random();
valeur = 1 + n.nextInt(150);



count1=0;


}

if(count1>mavariable){ tab[i][j]= valeur;

}

count1++;
} while(tab[k][l]!=valeur && count1<mavariable);



}}





System.out.print("\t"+tab[i][j]);
}



System.out.println("");






}






System.out.println(" Ma première diagonale est : ");


for(int i=0; i<tab.length; i++)
{
for(int j=0; j<tab[i].length; j++)
{
if(i!=j)
{


temp = tab[i][j];
tab[i][j] = tab[j][i];
tab[j][i] = temp;

}


}
for(i=0; i<tab.length; i++)

{
for(int j=0; j<tab.length; j++)

{

System.out.print("\t"+tab[i][j]);
}
System.out.println("");
}
}

}

}
A voir également:

1 réponse

bigmanes Messages postés 11 Date d'inscription mardi 24 octobre 2006 Statut Membre Dernière intervention 19 juillet 2010 1
Modifié par bigmanes le 19/07/2010 à 10:58
Salut,
Pour faire ton code, voici un petit algo que tu peux suivre et qui pourra t'aider probablement.
Tu génères un nombre pour la case actuelle où tu te trouves (pour cela, il te
faut comme un index pour localiser ta case actuelle).

Si en parcourant depuis le début jusqu'à la case actuelle tu ne retrouves ton nombre généré
dans aucune des cases précédentes, ce dernier deviens confirmé pour la case actuelle et tu
évolues à la case suivante

Sinon tu ne bouges pas de la case actuelle et tu regénères un autre nombre pour la
même vérification.
0