Figure losange java

sysy -  
 sysy -
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?

1 réponse

  1. Marco la baraque Messages postés 1030 Statut Contributeur 329
     
    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
    1. sysy
       
      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
      1. Marco la baraque Messages postés 1030 Statut Contributeur 329 > sysy
         
        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
      2. sysy > Marco la baraque Messages postés 1030 Statut Contributeur
         
        merci ^^
        0
    2. sysy
       
      non en fait c'est pas grave si le programme contient des "for",
      mais que représente la commande Math.abs?
      0
    3. sysy
       
      pourrais- tu me ré-ecrire les explications car elles sont coupées je ne voie pas la fin des phrases.
      merci.
      0