[java] dessiner une croix

Résolu/Fermé
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 - 5 nov. 2010 à 21:33
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 - 6 nov. 2010 à 17:26
Bonjour,


j'ai un petit problème avec un programme en java

l'utilisateur doit entrer un chiffre puis on doit se servir de ce chiffre pour afficher une croix grace a des étoiles :

par exemple :

***
*****
*****
*****
***

le problème que j'ai est exactement le même que sur l'exemple que j'ai mis : les espaces sont plus petits que les étoiles (ou un autre caractère)

du coup la ligne du dessus et celle du dessous ne sont jamais centrés sur ma croix

y a t'il un moyen de régler ce problème? (par exemple en mettant un caractère et une fonction pour le rendre "invisible")

merci d'avance

A voir également:

6 réponses

oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
5 nov. 2010 à 22:51
import java.util.Scanner;

public class Croixbis {
	public static void main (String[] args){
		
		int N, n, pair, espace = 0;
		
		Scanner sc = new Scanner (System.in);
		
		System.out.print ("entrez la valeur de N : ");
		N = sc.nextInt();
		
		pair = N % 2;
		
		if (pair == 0)
		{
			n = N *2;
			
		}
		
		else 
		{
			n = (N*2) - 1;
		}
		
		
		espace = (n/2) - (N/2);
	
		
		
		
		
		
		for (int j =0; j < espace; j++)
		{
		
			for (int a = 0; a<espace; a++)
		{
			System.out.print ("a");
		}
		
		for (int i = 0; i< N; i++)
		{
			System.out.print("*");
		}
		
		System.out.print ("\n");
	}
	
		for (int j = 0; j <N; j++)
		{
			
			for (int i = 0; i<n; i++)		
			{
				System.out.print ("*");
			}
		
			System.out.print ("\n");
		}	
		
		
	for (int j =0; j < espace; j++)
		{
		
			for (int a = 0; a< espace; a++)
		{
			System.out.print ("a");
		}
		
		for (int i = 0; i< N; i++)
		{
			System.out.print("*");
		}
		
		System.out.print ("\n");
	}
	
		
		
		
	}
}


voila le code

et justement c'est l'alignement qui me pose problème


	for (int j =0; j < espace; j++)
		{
		
			for (int a = 0; a< espace; a++)
		{
			System.out.print ("a");
		}
		
		for (int i = 0; i< N; i++)
		{
			System.out.print("*");
		}
		
		System.out.print ("\n");
	}


cette boucle me sert a afficher des espaces pour aligner mes étoiles au milieu de ma croix
j'ai mis des 'a' au lieu des espaces et ca marche
par contre dès que je remet les espaces ma croix n'est plus "normale"
et si je compte les espaces (en me déplacant d'un espace a la fois avec les flèches) j'ai exactement le nombre d'espaces qu'il me faut

donc apparemment les espaces sont plus "petits" que les caractères d'où mon problèmes

(je n'ai pas d'exemples de croix a te montrer mais suffit de tester le programme directement avec les 'a' ca te montrera comment doit être la croix)
2
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 5/11/2010 à 22:34
Je n'ai pas bien compris ton problème, dans une console tous les caractères sont alignés, donc il n'y a pas à afficher de caractères invisibles, des espaces et c'est bon...

Montre nous ce que tu as fait, pour mieux comprendre de quoi on parle, et donne nous un exemple d'une "croix" bien faite (utilise les balises de codes pour bien les aligner)
La confiance n'exclut pas le contrôle
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 5/11/2010 à 23:19
Ce n'est pas du tout le genre de croix que j'imaginais, je pensais plus à un "x" qu'à un "+", cependant, je n'ai pas de problème d'alignement quand je remplace "a" par " "

J'obtiens le résultat escompté, à savoir, pour n=5 :

  ***** 
  ***** 
********* 
********* 
********* 
********* 
********* 
  ***** 
  *****

Je reconnais que ce n'est pas très esthétique, car les caractères sont plus hauts que larges, mais ton algorithme est bon !
Qu'est-ce que tu utilises pour exécuter ton code ? Moi j'ai testé ça avec la "console" d'Eclipse et comme je te dis, ça marche correctement...
La confiance n'exclut pas le contrôle
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
5 nov. 2010 à 23:09
Pour le moment j'utilise Scite pcq ils veulent qu'on utilise celui la a la fac (mais il est vraiment nul^^)
j'ai aussi eclipse mais pour le moment je peux rien compiler dessus faut que je trouve ce qui se passe

si mon algorithme est bon c'est déja ca^^

merci pour tes réponses
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
5 nov. 2010 à 23:15
Si c'est l'affichage de Scite qui t'induis en erreur, exécute tout simplement en ligne de commande, ça devrait résoudre tes problèmes d'affichage :

java Croixbis
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
5 nov. 2010 à 23:21
la console me met une erreur quand je lance en ligne de commande :

C:\Users\olivier>java Croixbis
Exception in thread "main" java.lang.NoClassDefFoundError: Croixbis
Caused by: java.lang.ClassNotFoundException: Croixbis
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Croixbis. Program will exit.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
5 nov. 2010 à 23:30
Il faut que tu te places dans le dossier où tu as compilé ta classe, sinon forcément ça ne marche pas...

cd "C:\...\MonDossier" // là où est 'Croixbis.class'
java Croixbis
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
6 nov. 2010 à 08:55
c'est bon ca marche

merci beaucoup
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
6 nov. 2010 à 12:17
Je viens de regarder ton code et j'ai relevé deux points qui peuvent être améliorés.
1) L'imbrication des boucles, utiliser des fonctions serait plus clair.
2) Le calcul de espace qui peut-être fait plus simplement.

Exemple :

import java.util.Scanner;

public class CroixTer
{
    final static char ESPACE=' ';
    final static char ETOILE='*';
    
    private static void dessinerLigne(int nbEspaces, int nbEtoiles) 
    {
        for (int i=0; i<nbEspaces; i++)
            System.out.print(ESPACE);
        for (int i=0; i<nbEtoiles; i++)
            System.out.print(ETOILE);
        for (int i=0; i<nbEspaces; i++)
            System.out.print(ESPACE);
        System.out.println();
    }
    
    public static void dessinerCroix(int n)
    {
        int m = n/2;
        
        for (int j=0; j<m; j++)
            dessinerLigne(m,n);
        for (int j=0; j<n; j++)
            dessinerLigne(0,2*m+n);
        for (int j=0; j<m; j++)
            dessinerLigne(m,n);
        System.out.println();
    }
    
    public static void main(String[] args)
    {
        System.out.print("Entrez la valeur de n : ");
        int n=new Scanner(System.in).nextInt();
        dessinerCroix(n);
    }
}
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
Modifié par oliver3923 le 6/11/2010 à 17:28
salut

d'abord encore merci pour ton aide et tes conseils

pour les fonctions d'habitude c'est ce que je fais (en C) mais je n'ai pas encore appris a le faire en java a la fac (on n'avance vraiment pas vite^^) et j'ai pas encore eu le temps de regarder sur le sdz

pour les espaces j'avais calculé comme toi au début mais vu que ca ne marchait pas (enfin je croyais^^) j'ai essayé autrement^^
0