[JAVA] Classe Rectangle/Objet.

Résolu/Fermé
Utilisateur anonyme - 7 mars 2008 à 10:39
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 12 janv. 2013 à 12:34
Salut,

J'ai codé une classe Rectangle ayant les méthodes suivanes : un constructeur à deux arguments, une méthode périmètre et une méthode surface. Au moment de la compilation, on m'affiche deux erreurs : lors de la déclaration de mon constructeur et une parenthèse manquante (pourtant je vois que j'ai fermé toutes mes parenthèses).

public class Disque
{
public static void main(String args[])
{
float diametre;
float pi = 3.14;
Disque(float d)
{
diametre=d;
}
float perimetre(float diametre)
{
float p;
p=
System.out.println("le perimetre du disque est : "+p);
}
float surface(float
{
float s;
s=
System.out.println("la surface du disque est : "+s);
}
}
}


Quelqu'un pourrait m'aider ? Merci par l'avance.
A voir également:

4 réponses

Utilisateur anonyme
7 mars 2008 à 12:14
Salut et merci de ton aide :)
Je découvre que j'ai inséré mon brouillon, la honte ! Désolée.
Voilà au fait ce que je voulais afficher : //après indentation et prise en compte de tes corrections.
public class Disque
{
	public static void main(String args[])
	{
		float diametre;
		float pi = 3.14;
		Disque(float d)
			{
				super();
				diametre=d;
			}
		float perimetre()
			{
				float p=0;
				r=diametre/2;
				p=(4/3)*r*r*r;
				System.out.println("le perimetre du disque est : "+p);
			}
		float surface()
			{
				float s=0;
				r=diametre/2;
				s=pi*r*r;
				System.out.println("la surface du disque est : "+s);
			}
	}
}

S'il te plait, je n'ai pas compris cette ligne -je la vois pour la première fois- :(
super();

Je ne suis pas certaine des calculs de la surface et du périmètre, ça fait un bail que je ne les ai pas utilisés ;)
Par la suite, j'ai écris une classe qui s'appelle Test afin d'instancier deux rectangles, j'ai affiché après les valeurs calculées Ma question est comment je mets en relation les deux classes : Disque et Test ? Ou bien je ferais comme toi : la classe Test se transformera en un main.
Voilà ma classe Test :
class Test
	{
		public static void main(String args[])
			{
				Disque d1=new Disque(10);
				Disque d2=new Disque(15);

				System.out.println("le perimetre du disque 1 est : "+d1.perimetre());
				System.out.println("le perimetre du disque 2 est : "+d2.perimetre());
			}
	}
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
7 mars 2008 à 13:37
super() permet d'appeler le constructeur de la classe mère. Par défaut en java, toute classe que tu créé toi, même si tu n'y met pas d'extends sur une autre classe, étends la classe générique Object.

Mettre super() dans ton constructeur ne sert pas à grand chose dans ton cas, c'est juste une habitude à prendre :)

Par contre tu n'as pas suivi à la lettre tout ce que j'ai dit : Tu as encore ta méthode main de ta classe Disque qui englobe ton constructeur ainsi que tes autres méthodes ce qui est STRICTEMENT INTERDIT.

Corrige comme je t'ai dit ou tout simplement, puisque tu as créé une classe externe, supprime là.

Voilà ta nouvelle classe (à utiliser / copier - coller) :
public class Disque
{
		private float diametre;
		private float pi = 3.14;
		Disque(float d)
			{
				super();
				diametre=d;
			}
		public void perimetre()
			{
				float p=0;
				float r =diametre/2;
				p=(4/3)*r*r*r;
				System.out.println("le perimetre du disque est : "+p);
			}
		public void surface()
			{
				float s=0;
				float r=diametre/2;
				s=pi*r*r;
				System.out.println("la surface du disque est : "+s);
			}
	}
}


Dans cette nouvelle version tu as également oublié de déclarer tes variables 'r' dans tes fonction de perimetre et surface.
J'ai également enlevé le retour 'float' de ces mêmes méthodes. Si tu déclare un retour il faut obligatoirement retourner un résultat !
Personnellement ce que je ferais c'est justement retourner ton calcul (et pas l'afficher directement dans ta classe Disque), le récupérer dans le main de ton autre classe (là où tu instancie tes objets Disque et fais appel aux méthodes de calcul du périmètre), puis tu affiche les valeur récupérées.

Voici le code des deux classes :
public class Disque
{
		private float diametre;
		private float pi = 3.14;
		Disque(float d)
			{
				super();
				diametre=d;
			}
		public float perimetre()
			{
				float p=0;
				float r =diametre/2;
				p=(4/3)*r*r*r;
				return p;
			}
		public float surface()
			{
				float s=0;
				float r=diametre/2;
				s=pi*r*r;
				return s;
			}
	}
}

class Test
	{
		public static void main(String args[])
			{
				Disque d1=new Disque(10);
				Disque d2=new Disque(15);

				System.out.println("le perimetre du disque 1 est : "+d1.perimetre());
				System.out.println("le perimetre du disque 2 est : "+d2.perimetre());
			}
	}

0
Utilisateur anonyme
8 mars 2008 à 21:49
Tu as laissé glisser une parenthèse dans la classe Disque apparemment ^^ (ici : Voici le code des deux classes : )

Quand j'ai compilé, une erreur a apparu : il s'agit du type de p et de s ; ces variables devront être de type double car elles seront multipliées par le 3.14

Je devrais modifier le type de pi pour être double et par la suite, je modifie les types de p et de s ? (c'est ce que j'ai fait au fait !)

J'ai ajouté une autre classe Rectangle à ce code et j'ai essayé de calculer les diagonales :
Enfin, mon code ressemble à ceci :

public class Disque
{
	private double diametre;
	private double pi = 3.14;

	Disque(double d)
	{
		super();
		diametre = d;
	}


	public double perimetre()
	{
		double p = 0;
		double r = diametre / 2;
		p = (4 / 3) * r * r * r;
		return p;
	}
	public double surface()
	{
		double s = 0;
		double r = diametre / 2;
		s = pi * r * r;
		return s;
	}
}

public class Rectangle
{
	private float largeur;
	private float hauteur;

	Rectangle(float l, float h)
		{
			largeur=l;
			hauteur=h;
		}
	public float perimetre()
		{
			float p;
			p=(largeur+hauteur)*2;
			return p;
		}
	public float surface()
		{
			float s;
			s=largeur*hauteur;
			return s;
		}
}

class Test
	{
		public static void main(String args[])
			{
				Disque d1=new Disque(10);
				Disque d2=new Disque(15);

				System.out.println("le perimetre du disque 1 est : "+d1.perimetre());
				System.out.println("le perimetre du disque 2 est : "+d2.perimetre());
				System.out.println("la surface du disque 1 est : "+d1.surface());
				System.out.println("la surface du disque 2 est : "+d2.surface());
				System.out.println("le perimetre du rectangle 1 est : " + r1.perimetre());
				System.out.println("le perimetre du rectangle 2 est : " + r2.perimetre());
				System.out.println("la surface du rectangle 1 est : " + r1.surface());
				System.out.println("la surface du rectangle 2 est : " + r2.surface());

				float diagonale1, diagonale2;

				diagonale1 = sqrt(l.r1 * l.r1 + h.r1 * h.r1);
				diagonale2 = sqrt(l.r2 * l.r2 + h.r2 * h.r2);
				System.out.println("le diagonale du rectangle 1 est : " + diagonale1);
				System.out.println("le diagonale du rectangle 2 est : " +diagonale2);
			}
	}


J'ai plein d'erreurs c'est sûr :(

Bonne soirée :)
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
7 mars 2008 à 10:52
Bonjour,

La parenthèse manquante est ici :
float surface(float)


Ton erreur dans ton constructeur c'est parce que tu défini ton constructeur à l'intérieur de ton main... ce qui est impossible de faire.

Voilà ta classe correctement écrite :
public class Disque
{

float diametre;
float pi = 3.14;
Disque(float d)
{
super();
diametre=d;
}

float perimetre( )  // --- Pas besoin de paramètre puisque le diamètre est renseigné dans ton constructeur
{
float p = 0;
p= ???? // --- Ici il faudrait faire ton calcul de périmètre !
System.out.println("le perimetre du disque est : "+p);
}

float surface( ) // --- Pas besoin de paramètre puisque le diamètre est renseigné dans ton constructeur
{
float s = 0;
s = // --- Calculer ta surface !!
System.out.println("la surface du disque est : "+s);
}

public static void main ( String[] args ){
   Disque monDisque = new Disque(10);
   monDisque.perimetre();
   monDisque.surface();
}

}

-1
Bonjour et merci de l'explication , je suis débutante en java (0 km) , merci de m'expliquer le role la fonction super() au niveau de ce la classe disque
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
12 janv. 2013 à 12:34
"le role la fonction super() au niveau de ce la classe disque"
Cette explication a déjà été donnée il y a 5 ans dans le message #3
0