Jump to content

[JAVA] dessiner des polygones


Recommended Posts

bon ben voila jai créer trois classe .tous m'a l'aire correcte mais je comprend pas pourquoi aucun polygone ne se dessine...


public class point { 

 int x;
 int y;
public point(int xx, int yy) {
   x =xx;
y =yy;
}


public int getX() {
 return x;
}


public void setX(int x) {
 this.x = x;
}


public int getY() {
 return y;
}


public void setY(int y) {
 this.y = y;
}


public void translater (int delta)
{x+=delta;        // x<=x+delta
y+=delta;        // y=y+delta aussi...
}

  }

import java.awt.Graphics;

//
public class polygone {
point[] tab;
int nPoints; // déclare une variable de type entier
public  polygone(point[]t,int n){
tab=t;
nPoints=n;
}
public int getNpoints(){//pour acceder a npoint
return nPoints; //inutile car public
}
public point[] gettab(){
return tab;
}
public void afficher(Graphics g){
int[] abs;
int[] ord;
abs=new int[nPoints];
ord=new int[nPoints];
for(int i=0; i< nPoints; i++){
abs[i]=tab[i].getX();
ord[i]=tab[i].getY();
}
g.drawPolygon(abs,ord,nPoints);//api qui  dessine le poly
}
public void translater (int delta){
for(int i=1; i<=nPoints;i++ ){
tab[i].translater (delta);
}
}
}

import java.applet.*;
import java.awt.*;

public class essais extends Applet{
//déclarations des objets
point p1,p2,p3,p4;
polygone poly1;
point[] t1;
//initialisation de l'applet:
public void init()
{p1=new point(50,100);
p2=new point(100,30);
p3=new point(250,250);
p4=new point(300,320);
//....
t1=new point[4];
t1[0]=p1;
t1[1]=p2;
t1[2]=p3;
t1[3]=p4;
//...
poly1=new polygone(t1,4);
setBackground(Color.white);

}
//tracé
public void point(Graphics g)
{g.setColor(Color.black);
for (int i=1;i<3;i++)
{poly1.translater(10+i);
poly1.afficher(g);
}
}
}

soyez indulgent ....1er DM d'info....

Link to comment
Share on other sites

Je n'ai pas analysé le code, mais au premier coup d'oeil, je pense que tu as fait une erreur de frappe dans la méthode :

 public void point(Graphics g)

, qui devrait être :

 public void paint(Graphics g)

Essaie avec ça et dis-nous si ça marche mieux :)

Link to comment
Share on other sites

voila j'ai modifier voila ce qui apparait dans la console ==>

java.lang.ArrayIndexOutOfBoundsException: 4
at polygone.translater(polygone.java:30)
at essais.paint(essais.java:30)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

sinon rien à changer , la fenetre s'ouvre avec marqué appelet démaré , mais pas de polygoneà l'écran.....

Link to comment
Share on other sites

Hé dis donc on n'est pas aux ordres hein ;)

Tout ça sent le devoir d'école à rendre d'urgence sans vouloir se casser le bol...

Et puis apprends à faire une boucle sur un tableau sans en dépasser les bornes... dans ta fonction "translater" par exemple... Tout est indiqué dans l'erreur Java, jusqu'au numéro de la ligne où ça casse !

Link to comment
Share on other sites

Hey ccornaille tu ne crois pas que tu abuse un peu là ?

Un up en moins de 30 secondes ;)

Pas plus d'un topic par jour s'il te plait :pastoutlu: J'espère que je n'aurais pas à le redire.

Par ailleurs, poser une question sur un forum de dispense pas de continuer à chercher dans son coin sur des tutos, sites webs, sur IRC, d'autres forum, ou ... avec son cerveau (meilleur déguggeur au monde) :|

Link to comment
Share on other sites

Ah ok lol.

Bon j'explique : quand quelque chose ne va pas bien, Java produit une "exception". Il y a plein d'exceptions différentes, correspondant à plein de types de problèmes. Ce qui est bien, c'est que les exceptions portent généralement des noms très explicites, ce qui aide à trouver facilement la cause du problème.

Dans ton cas, c'est une "ArrayIndexOutOfBoundsException", qui signifie donc, en anglais : "un problème lié à l'index d'un tableau, car l'index demandé est supérieur à ce que le tableau autorise". Dans ton cas, Java te donne même la valeur fautive : 4. Cela veut dire que tu as essayé d'accéder à la 5° case du tableau (index 4), alors que ton tableau ne comporte que 4 cases ou moins. D'où un petit problème...

C'est une erreur classique : les index des tableaux commencent à 0, c'est-à-dire que la première case du tableau est numérotée "0". Donc, pour boucler sur toutes les cases d'un tableau de 10 éléments par exemple, il faudra faire une boucle allant de 0 à 9.

Un moyen sûr d'éviter de genre d'ennuis est de ne pas coder le nombre d'itérations de la boucle en dur dans le code, mais plutôt de demander directement sa taille au tableau.

Exemple :

String[] tab = new String[10];
for (int i=0; i<tab.lentgh; i++)
{
   // ...traitement...
}

Ainsi, si on change la taille du tableau pour une quelconque raison, le code de la boucle n'a pas besoin d'être retouché. Et on évite les "ArrayIndexOutOfBoundsException" par la même occasion.

Bon, revenons au message d'erreur.

Lorsqu'il produit une exception, Java indique la ligne où le problème a été rencontré, et l'historique des appels de fonctions qui a conduit à cette ligne (toutes les lignes d'erreur commençant par "at").

Le message d'erreur se lit de haut en bas.

at polygone.translater(polygone.java:30)
at essais.paint(essais.java:30)
at sun.awt.RepaintArea.paint(Unknown Source)
(... etc ...)

Dans ton cas, la première ligne indique que l'erreur est dans ton fichier source "polygone.java", dans la fonction "translater", et plus exactement à la ligne 30.

Les lignes suivantes signifient : cette fonction "translater" a été appelée depuis la ligne 30 de la fonction "paint" du fichier source "essais.java", qui elle-même a été appelée par ... etc ...

Cela permet de connaître le chemin suivi par le programme lors de son exécution, qui conduit à cette fameuse erreur.

Voilà pour les explications, ça va mieux maintenant ? :)

Link to comment
Share on other sites

c'est tous simplement parfait :-D !!!!

c'est exactement le type de réponse que j'attendait :francais:

sinon j'ai une autre petite question:

     int listeXp1[]={50,40,80,100,55}; 
 

es ce que tu peux me dire si c'est possible d'ajouté une certaine valeur(par exemple 10) à chaque index de mon tableau.

pour arrivé a un nouveau talbeau ==>

 int listeXp2[]={60,50,90,110,65}; 

????

Link to comment
Share on other sites

sinon j'ai une autre petite question:

     int listeXp1[]={50,40,80,100,55}; 
 

es ce que tu peux me dire si c'est possible d'ajouté une certaine valeur(par exemple 10) à chaque index de mon tableau.

pour arrivé a un nouveau talbeau ==>

 int listeXp2[]={60,50,90,110,65}; 

????

oui, tu peux

dans la limite du type du tableau (ici entier [int], donc tu as encore de la marge !!)

pour rappel, int est codé sur 16 bits donc en fonction de s'il est signé ou non :

(signed) int : de -32767 à 32767

unsigned int : de 0 à 65535

Link to comment
Share on other sites

Dommage, un int est sur 32 bits signés en java.

Pour ajouter 10 à chaque élément du tableau, il suffit de boucler dessus, et d'incrémenter la valeur des éléments.

Par exemple :

for (int i = 0; i < listeXp1.length; i++)
{
   listeXp1[i] += 10;
}

Link to comment
Share on other sites

int listeXp5[]=listeXp1[]+10;

int listeXp5[]=listeXp1[+10]

bien évidement ce qui est ci dessus ne fonctionne pas, alors ==>

Comment on fait ?? :francais:

PS : merci sentinel ta eté trop rapide mais dans ton explication sa ne me créé pa un nouveau tableau avec mes nouvelle valeur...

Link to comment
Share on other sites

Ah pardon un nouveau tableau...

Ben il suffit de créer ce nouveau tableau (en indiquant que sa taille est la même que le tableau source), puis de le remplir en bouclant sur les valeurs du tableau d'origine.

// Création du nouveau tableau, de la même taille
int[] tableau2 = new int[tableau1.length];

// Remplissage
for (int i = 0; i < tableau1.length; i++)
{
  tableau2[i] = tableau1[i] + 10;
}

Mais dis-moi c'est vraiment de la programmation de base ça, tu fais quoi dans la vie ? Etudiant ?

A mon avis si tu veux apprendre à programmer, il ne faut pas commencer par Java... Acquiers les bases en Pascal par exemple, ou en PHP, et passe à Java après seulement...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...