Figure losange java

Fermé
sysy - 9 nov. 2008 à 17:19
 sysy - 9 nov. 2008 à 21:45
Bonjour, j'essai de reproduire cette figure(sans prendre en compte les points):


..........*
........***
......*****
........***
..........*

voici mon code :

class exo4 {
public static void main(String[] args){
	int max=5;
	int i=1;
	int j=0;
	int k=2;
	while(i<=max && k<=max){
		j=1;
		while(j<=max){
		if(i==((max/2)+1)){System.out.print("*");}
		else {if(j==(max/2)+1){System.out.print("*");}
		else {if (j==((max/2)+i) && i<=max-i){System.out.print("*");}
		else {if (j==(max/2)-i && i<=max-i){System.out.print("*");}
		else System.out.print(" ");}}}
				
                                              j++;}
				
				
				
			i++;
			
                                           System.out.println("");}
				
			}
	
			}


je ne sais pas où sont les erreurs, pouvez vous m'aider?
A voir également:

1 réponse

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
9 nov. 2008 à 20:29
Bonsoir,

Voici un code qui a l'air de fonctionner mieux :
public static void main(String[] args) {
		int max = 5;
		
		for (int ligne = 0; ligne < max; ligne++) {
			for (int colonne = 0; colonne < max; colonne++) {
				if (colonne >= Math.abs(max / 2 - ligne) && colonne <= max - 1 - Math.abs(max / 2 - ligne)) {
					System.out.print("*");
				}
				else {
					System.out.print(" ");
				}
			}
			System.out.println("");
		}


Pour le faire, j'ai écrit la matrice qui définissait le losange, et j'ai tenté de trouver les équations qui la composaient.
- pour max/2, l'équation est toujours vraie
- pour les lignes et colonnes inférieures à max/2, il faut que la somme ligne+colonne soit supérieure ou égale à max/2
- pour les colonnes inférieures à max/2 et les lignes supérieures à max/2, il faut que colonne-ligne soit inférieure ou égale à max/2 ...

Une fois toutes ces équations trouvées, il est possible de faire 4 blocs if pour tester toutes ces conditions, mais étant donné les symétries de la figure, elles peuvent être réunies dans un seul bloc si on trouve la formule qui va bien (ici on a notamment besoin de la valeur absolue).

Cordialement,
0
merci pour ta réponse, mais que représente les Math.abs? je ne connais pas encore cette fonction... serait-il possible d'avoir un programme avec des while et des if?
0
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328 > sysy
9 nov. 2008 à 21:12
Math.abs, c'est la méthode qui permet d'avoir la valeur absolue d'une expression mathématique.
La définition mathématique de la valeur absolue abs(x), c'est :
- abs(x) = x si x>=0
- abs(x) = -x si x<0

Voici une méthode qui fonctionne uniquement avec des "si" en cascade :
	public static void main(String[] args) {
		int max = 5;
		
		for (int ligne = 0; ligne < max; ligne++) {
			for (int colonne = 0; colonne < max; colonne++) {
				if ((ligne <= max / 2 && colonne <= max / 2 && ligne + colonne >= max / 2)
						/*quart haut-gauche*/
					|| (ligne <= max / 2 && colonne > max / 2 && colonne - ligne <= max / 2)
						/*quart haut-droite*/
					|| (ligne > max / 2 && colonne <= max / 2 && ligne - colonne <= max / 2)
						/*quart bas-gauche*/
					|| (ligne > max / 2 && colonne > max / 2 && ligne + colonne <  3 * max / 2)
						/*quart bas-droite*/ ){
					System.out.print("*");
				}
				else {
					System.out.print(" ");
				}
			}
			System.out.println("");
		}
	}


Cordialement,

ps: il est préférable d'utiliser des for que des while lorsque tu sais exactement quand tu vas finir ta boucle. En terme de fonctionnalité et de performances, les deux structures sont totalement équivalentes.
0
sysy > Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009
9 nov. 2008 à 21:45
merci ^^
0
non en fait c'est pas grave si le programme contient des "for",
mais que représente la commande Math.abs?
0
pourrais- tu me ré-ecrire les explications car elles sont coupées je ne voie pas la fin des phrases.
merci.
0