Error: illegal start of expression

Résolu
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -  
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir à vous,

j'ai de nouveau un problème :

je dois instancier des classes puis les stocker dans un tableau, puis dans la classe ou tout ce beau monde est instancier et stocké, créer des méthodes à partir du tableau.

Voici mon code :

public class Terrain {

 public static void main(String argums[]) {  
  
  //Déclaration de la variable i
  int i;
 
  //Instanciation des classe Rectangle, Triangle, Cercle et du tableau batiments
  Rectangle r = new Rectangle(3,3);
  Triangle t = new Triangle(2,2); 
  Cercle c = new Cercle(2);
  Forme [] batiments = new Forme[i];
  batiments[0] = r;
  batiments[1] = t;
  batiments[2] = c;

  //Définition de la méthode ajouterForme() qui ajoute une nouvelle forme
  public boolean ajouterForme(){
  for ( int i=0 ; i < batiments.length ; i++){
   batiments[i]=new Forme();
   }
  }
  
  //Définition de la méthode calculerSurfaceTotale() qui calcule la surface totale occupée
  public double calculerSurfaceTotale()
  {return r.calculerSurface()+t.calculerSurface()+ c.calculerSurface();}
  
  //Définition de la méthode calculerSurfaceTotale() qui affiche la surface totale occupée
  public void afficherSurfaceTotale()
  {System.out.println("La surface totale est de "+calculerSurfaceTotale());}
 
 }
}

A la compilation, l'erreur suivante s'affiche : error: illegal start of expression
J'ai compris que c'était prsk tout ca ne devait pas être contenu dans le main apparement (a part les instanciations).

Help please :/
A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Tu ne peux pas imbriquer une méthode dans une autre.

Tes méthodes ajouterForme(), calculerSurfaceTotale() et afficherSurfaceTotale() doivent donc être déclarées avant ou après la méthode main() mais pas dedans.

Pour régler cette erreur tu peux déplacer le
}
de la ligne 32 en ligne 16 (mais il y aura d'autres erreurs qui suivront)
0
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
Merci KX pour ta réponse, je viens de faire ce que tu as dit (j'avais déjà fait ça) mais logiquement ilne reconnait pas les objets instanciés dans le main :/
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Pour faire simple, il suffirait de déclarer
Forme[] batiments
en dehors de la méthode main(), ligne 2 par exemple, il serait ainsi visible par toutes les méthodes.
0
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
Oui mais batiments est un tableau de type Forme, or dans le cadre de l'exercice, je ne peut pas créer d'instance de Forme, donc le type du tableau ne sera pas reconnu :/
0
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   > Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
Aussi, je ne vois pas comment le programme pourrait reconnaitre les différents objets, utilisés par les méthodes :/
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
Alors modifies tes méthodes pour leur ajouter un paramètre (le tableau) de manière à transporter tes valeurs d'une méthode à l'autre via ce paramètre.

Exemple :
public static double calculerSurfaceTotale(Forme[] formes) {
    return ... // calcul en utilisant le paramètre 'formes'
}

Et dans ton main :
Forme[] batiments = {new Rectangle(3,3), new Triangle(2,2), new Cercle(2)};
double total = calculerSurfaceTotale(batiments);
0
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
Je te remercie pour ta réponse. Dans ma logique, calculerSurfaceTotale() doit faire appelle aux méthodes calculerSurface() des 3 autres classes, donc je vois pas comment le paramètre formes peut m'aider avec cela (je ne pourrai pas faire formes.calculerSurface() par exemple)...
:/
0
Ouss91 Messages postés 35 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir,

J'ai résolu le problème.

Voici les codes :

Terrain.java :
public class Terrain extends Forme {
 
  private static Forme[] batiments;

  public Terrain(Forme...bat)
  {batiments=bat;}
  
  public static void main(String argums[])
  
   {  
  
   //Instanciation des classe Rectangle, Triangle, Cercle et du tableau batiments
   Rectangle r = new Rectangle(3,3);
   Triangle t = new Triangle(2,2); 
   Cercle c = new Cercle(2);
   batiments[0] = r;
   batiments[1] = t;
   batiments[2] = c;
  }
  
  //Définition de la méthode ajouterForme() qui ajoute une nouvelle forme
  //public boolean ajouterForme(){
  //for ( int i=0 ; i < batiments.length ; i++){
  // batiments[i]=new Forme();
  // }
  //}
  
  //Définition de la méthode calculerSurfaceTotale() qui calcule la surface totale occupée
  public double calculerSurfaceTotale()
  {
   double surfaceTotale=0;
   for ( int i=0 ; i < batiments.length ; i++){
    surfaceTotale=surfaceTotale+batiments[i].calculerSurface();
   }
   return surfaceTotale;  
  }
  
  //Définition de la méthode calculerSurfaceTotale() qui affiche la surface totale occupée
  public void afficherSurfaceTotale()
  {System.out.println("La surface totale est de "+calculerSurfaceTotale());}
}

TestAppliSurface.java :
public class TestAppliSurface {

 public static void main(String[] args) {
  Rectangle r=new Rectangle(4,4);
  Triangle t=new Triangle(2,2);
  Cercle c =new Cercle(2);
  Terrain te=new Terrain(new Rectangle(4,4), new Triangle(2,2), new Cercle(2));
  System.out.println("La longueur du rectangle est de "+r.getLongueur()+" et la largeur est de "+r.getLargeur());
  System.out.println("La surface du rectangle est de "+r.calculerSurface());
  System.out.println("La hauteur du triangle est de "+t.getHauteur()+" et la base est de "+t.getBase());
                System.out.println("La surface du triangle est de "+t.calculerSurface());
  System.out.println("Le rayon du cercle est de "+c.getRayon());
                System.out.println("La surface du cercle est de "+c.calculerSurface());
  te.afficherSurfaceTotale();
 }
}

Merci à vous et notamment à KX pour votre aide :)
0