Aller au contenu

[JAVA] dessiner des polygones


ccornaille

Messages recommandés

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....

Lien vers le commentaire
Partager sur d’autres 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.....

Lien vers le commentaire
Partager sur d’autres 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 !

Lien vers le commentaire
Partager sur d’autres 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) :|

Lien vers le commentaire
Partager sur d’autres 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 ? :)

Lien vers le commentaire
Partager sur d’autres 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}; 

????

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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...

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...