A voir également:
- Vérifier que 2 nombres ne sont sur même ligne
- Partager photos en ligne - Guide
- Verifier compatibilite windows 11 - Guide
- Mètre en ligne - Guide
- Avoir 2 comptes whatsapp sur le même téléphone - Guide
- Verifier un lien - Guide
7 réponses
Bonjour,
pouvez vous nous présenter une ébauche de ta part?
autrement, voila comment procéder:
- utiliser Math.random() pour générer un nombre aléatoire, et le changer pour avoir un nombre entre 1 et 4.
- utiliser une boucle while dans la boucle for pour tester la présence d'un nombre dêja enregistré.
NB:
- si tu vise un tableau comme celui du Sudoku en taille 4, alors ça va te demander un esprie dure en math et récursivité.
- si tu vise un tableau respectant exactement les consignes cité en message en haut, alors, il te faut une plage de nombre entre 1 et 7, pour éviter des situation de boucle infinie.
Bonne chance
pouvez vous nous présenter une ébauche de ta part?
autrement, voila comment procéder:
- utiliser Math.random() pour générer un nombre aléatoire, et le changer pour avoir un nombre entre 1 et 4.
- utiliser une boucle while dans la boucle for pour tester la présence d'un nombre dêja enregistré.
NB:
- si tu vise un tableau comme celui du Sudoku en taille 4, alors ça va te demander un esprie dure en math et récursivité.
- si tu vise un tableau respectant exactement les consignes cité en message en haut, alors, il te faut une plage de nombre entre 1 et 7, pour éviter des situation de boucle infinie.
Bonne chance
Bonsoir,
je te donne une explication, et si tu n'arrive pas à developper une ébauche, je passe au code:
int nbreGenere= (int) (Math.random()*max);
boolean existe=true
while(existe==true){
//regénération du nombre après avoir
//été trouvé dans une ligne ou une colonne
nbreGenere= (int) (Math.random()*max);
//éliminer le cas d'une valeur nulle
while(nbreGenere==0){
nbreGenere= (int) (Math.random()*max);
}
existe=false;
//recherche verticale
//bien sur si on est pas dêja à la 1iere ligne
if(i!=0){
for (int k = 0; k < i; k++){
if(monTableau[k][j]==nbreGenere){
existe=true;
}
}
}
if(j!=0){
//recherche horizontale
//bien sur si on est pas dêja à la 1iere colonne
for (int l = 0; l < j; l++){
if(monTableau[i][l]==nbreGenere){
existe=true;
}
}
}
}
à la sortie de cette boucle while, qui doit etre incluse dans les deux boucles for classiques (du tableau), tu seras sur que le nombre généré n'existe pas.
NB:
condition nécessaire, max=longeur+largeur du tableau.
alors tableau 4x4 implique max=8
Being normal is boring... being geek is interesting
je te donne une explication, et si tu n'arrive pas à developper une ébauche, je passe au code:
int nbreGenere= (int) (Math.random()*max);
boolean existe=true
while(existe==true){
//regénération du nombre après avoir
//été trouvé dans une ligne ou une colonne
nbreGenere= (int) (Math.random()*max);
//éliminer le cas d'une valeur nulle
while(nbreGenere==0){
nbreGenere= (int) (Math.random()*max);
}
existe=false;
//recherche verticale
//bien sur si on est pas dêja à la 1iere ligne
if(i!=0){
for (int k = 0; k < i; k++){
if(monTableau[k][j]==nbreGenere){
existe=true;
}
}
}
if(j!=0){
//recherche horizontale
//bien sur si on est pas dêja à la 1iere colonne
for (int l = 0; l < j; l++){
if(monTableau[i][l]==nbreGenere){
existe=true;
}
}
}
}
à la sortie de cette boucle while, qui doit etre incluse dans les deux boucles for classiques (du tableau), tu seras sur que le nombre généré n'existe pas.
NB:
condition nécessaire, max=longeur+largeur du tableau.
alors tableau 4x4 implique max=8
Being normal is boring... being geek is interesting
j'avais déjà fait sa moi:
import java.util.Scanner;
public class tableau{
public static void main(String[] args) {
int[][] monTableau= new int[4][4];
//remplissage de la matrice monTableau
for (int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
monTableau[i][j]= (int) (int)(Math.random() * 4) + 1;
System.out.print(monTableau[i][j]);
}
System.out.println();
}
}
}
import java.util.Scanner;
public class tableau{
public static void main(String[] args) {
int[][] monTableau= new int[4][4];
//remplissage de la matrice monTableau
for (int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
monTableau[i][j]= (int) (int)(Math.random() * 4) + 1;
System.out.print(monTableau[i][j]);
}
System.out.println();
}
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir
ce qu'il faut, c'est, avant d'affecter la valeur (int)(Math.random() * 4) + 1 à monTableau[i][j], de vérifier si cette valeur existe dêja sur la ligne [i] et la colonne [j].
je t'ai déjà parlé de la contrainte sur le max lié a random, et pour l'éclairer, imagine que ton programme a généré des valeurs et il arrive à l'élément T[3][3] (v):
x y 1 z
a b 3 c
2 4 v .
. . . w
si tes valeurs sont >=1 et <=4, étant donné la contrainte cité en message en top haut, le programme ne trouvera jamais une valeur v, car ttes les valeurs possible sont dja enregistrées.
pour la valeur w, nous aurons 3+3 valeurs diffirentes, et en ajoutant w, nours devons avoir 7 valeurs diffirentes, d'ou le max doit etre 8
Being normal is boring... being geek is interesting
ce qu'il faut, c'est, avant d'affecter la valeur (int)(Math.random() * 4) + 1 à monTableau[i][j], de vérifier si cette valeur existe dêja sur la ligne [i] et la colonne [j].
je t'ai déjà parlé de la contrainte sur le max lié a random, et pour l'éclairer, imagine que ton programme a généré des valeurs et il arrive à l'élément T[3][3] (v):
x y 1 z
a b 3 c
2 4 v .
. . . w
si tes valeurs sont >=1 et <=4, étant donné la contrainte cité en message en top haut, le programme ne trouvera jamais une valeur v, car ttes les valeurs possible sont dja enregistrées.
pour la valeur w, nous aurons 3+3 valeurs diffirentes, et en ajoutant w, nours devons avoir 7 valeurs diffirentes, d'ou le max doit etre 8
Being normal is boring... being geek is interesting
essaie ce code:
public class tableau{
public static void main(String[] args) throws InterruptedException {
//Définition des dimensions
int longueur=9, largeur=9;
//déclaration du tableau
int[][] monTableau= new int[9][9];
//le max non atteint doit être au moin 18.
int max=longueur+largeur;
//remplissage de la matrice monTableau
for (int i = 0; i < longueur; i++){
for(int j = 0; j < largeur; j++){
//première génération pou l'élément T(0,0)
int nbreGenere= (int) (Math.random()*max);
boolean existe=true;
while(existe){
//regénération du nombre après avoir
//été trouvé dans une ligne ou une colonne
nbreGenere= (int) (Math.random()*max);
//éliminer le cas d'une valeur nulle
while(nbreGenere==0){
nbreGenere= (int) (Math.random()*max);
}
existe=false;
//recherche verticale
//bien sur si on est pas dêja à la 1iere ligne
if(i!=0){
for (int k = 0; k < i; k++){
if(monTableau[k][j]==nbreGenere){
existe=true;
}
}
}
if(j!=0){
//recherche horizontale
//bien sur si on est pas dêja à la 1iere colonne
for (int l = 0; l < j; l++){
if(monTableau[i][l]==nbreGenere){
existe=true;
}
}
}
}
//élément non trouvé puisque
//on a sortis de la boucle while
monTableau[i][j]=nbreGenere;
//un peu de stylisme pour l'affichage
if(monTableau[i][j]<10)
System.out.print("0"+monTableau[i][j]+" ");
else
System.out.print(monTableau[i][j]+" ");
}
System.out.println();
}
}
}
Being normal is boring... being geek is interesting
public class tableau{
public static void main(String[] args) throws InterruptedException {
//Définition des dimensions
int longueur=9, largeur=9;
//déclaration du tableau
int[][] monTableau= new int[9][9];
//le max non atteint doit être au moin 18.
int max=longueur+largeur;
//remplissage de la matrice monTableau
for (int i = 0; i < longueur; i++){
for(int j = 0; j < largeur; j++){
//première génération pou l'élément T(0,0)
int nbreGenere= (int) (Math.random()*max);
boolean existe=true;
while(existe){
//regénération du nombre après avoir
//été trouvé dans une ligne ou une colonne
nbreGenere= (int) (Math.random()*max);
//éliminer le cas d'une valeur nulle
while(nbreGenere==0){
nbreGenere= (int) (Math.random()*max);
}
existe=false;
//recherche verticale
//bien sur si on est pas dêja à la 1iere ligne
if(i!=0){
for (int k = 0; k < i; k++){
if(monTableau[k][j]==nbreGenere){
existe=true;
}
}
}
if(j!=0){
//recherche horizontale
//bien sur si on est pas dêja à la 1iere colonne
for (int l = 0; l < j; l++){
if(monTableau[i][l]==nbreGenere){
existe=true;
}
}
}
}
//élément non trouvé puisque
//on a sortis de la boucle while
monTableau[i][j]=nbreGenere;
//un peu de stylisme pour l'affichage
if(monTableau[i][j]<10)
System.out.print("0"+monTableau[i][j]+" ");
else
System.out.print(monTableau[i][j]+" ");
}
System.out.println();
}
}
}
Being normal is boring... being geek is interesting
Bonsoir tortue60
dans ce sujet, je pense que j'ai assez expliquer les points suivants:
1- le cahier de charge n'est pas réalisable avec des méthodes de programmation simples, parce que si tu demande un tableau comme celui du Sudoku, alors il te faut appliquer la récursivité. et je pense a ce stage, pour toi, la récursivité n'est une option.
2- les solutions proposées ne contiennent que des méthodes simples qui ne sont même pas limitées au JAVA, je parle bien sur du "for" et "while". l'utilisation seule des boucles "for" ne va pas garantir la génération des nombres valides avec random. d'où la nécessité des boucles while.
3- étant admis que la longueur de l'intervalle des nombres doit etre égale a la somme des dimensions du tableau, c'est a dire, dans ton cas, le tableau 4x4 implique des nombres entre 1 et 7 et pas entre 1 et 4, j'ai cité ci dessus un exemple pour montré l'impossibilité de réaliser ton cahier charge sans modification.
pour moi, je pense qu'il te faut 2 choses importantes:
- un cours complet du langage Java, pour pouvoir se familiariser avec les méthodes de calcul.
- beaucoup d'exercice d'entrainement en logique, pour pouvoir traduire un probleme en un programme informatique (l'algorithmique).
si tu en besoin, je peux te proposer des liens.
BONNE CHANCE.
dans ce sujet, je pense que j'ai assez expliquer les points suivants:
1- le cahier de charge n'est pas réalisable avec des méthodes de programmation simples, parce que si tu demande un tableau comme celui du Sudoku, alors il te faut appliquer la récursivité. et je pense a ce stage, pour toi, la récursivité n'est une option.
2- les solutions proposées ne contiennent que des méthodes simples qui ne sont même pas limitées au JAVA, je parle bien sur du "for" et "while". l'utilisation seule des boucles "for" ne va pas garantir la génération des nombres valides avec random. d'où la nécessité des boucles while.
3- étant admis que la longueur de l'intervalle des nombres doit etre égale a la somme des dimensions du tableau, c'est a dire, dans ton cas, le tableau 4x4 implique des nombres entre 1 et 7 et pas entre 1 et 4, j'ai cité ci dessus un exemple pour montré l'impossibilité de réaliser ton cahier charge sans modification.
pour moi, je pense qu'il te faut 2 choses importantes:
- un cours complet du langage Java, pour pouvoir se familiariser avec les méthodes de calcul.
- beaucoup d'exercice d'entrainement en logique, pour pouvoir traduire un probleme en un programme informatique (l'algorithmique).
si tu en besoin, je peux te proposer des liens.
BONNE CHANCE.
pour le langage JAVA: http://www.siteduzero.com/informatique/exportPdf/apprenez-a-programmer-en-java
pour l'algorithmique: https://openclassrooms.com/fr/courses?categories=informatique&page=2&tags=algorithmique plusieurs tuto qui traite les différents aspect de programmation (trie, recherche...)
pour l'algorithmique: https://openclassrooms.com/fr/courses?categories=informatique&page=2&tags=algorithmique plusieurs tuto qui traite les différents aspect de programmation (trie, recherche...)