Programme compile mais marche pas ! [JAVA]

Programme compile mais marche pas ! [JAVA] - Programmation

Marsh Posté le 11-02-2001 à 22:47:12    

Voila merci a Verdoux pour m'avoir aider , maintenant j'ai complètement terminé, et la compilation passe mais après j'ai
droit a un bô :
java.lang.ArrayIndexOutOfBoundsException
     at FenetreSpectacle.<init>(FenetreSpectacle.java:39)
     at FenetreSpectacle.main(FenetreSpectacle.java:147)
 
En gros le programme est senser lire un fichier puis plasser l'information trouver dans des tableaux
 
puis une fenetre apparait demandant a l'utilisateur un numéro de spectacle ainsi que e nombre de billets voulu, puis toujours dans la même fenetre le nom du spectacle doit apparaître ainsi que le prix par billet et le total. quand l'utilisateur appui sur Terminer , il a droit au résultats de la journée avant que le programme se termine.
 
Voici mon programme :
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
 
 
public class FenetreSpectacle extends JFrame implements ActionListener
{
  private final int MAX_SPECTACLES = 15;
 
  private JLabel labelNoSpectacle, labelDescript, labelPrix,
          labelNbBillet, labelTotal;
  private JTextField champNoSpectacle, champDescript, champPrix,
   champNbBillet, champTotal;
  private JButton boutonTerminer, boutonInitialiser;
 
  private int tabNoSpectacle[] = new int[MAX_SPECTACLES];
  private String tabDescript[] = new String[MAX_SPECTACLES];
  private double tabPrix[] = new double[MAX_SPECTACLES];
 
  private int nbEl;
 
  public FenetreSpectacle() throws IOException
  {
    super("Facturation de spectacle" );
    int j;
    BufferedReader fichier = new BufferedReader (new FileReader("a:spectacles.txt" ));
    String ligne;
 
    nbEl= 0 ;
 
    ligne = fichier.readLine();
    while (ligne != null)
    {
      tabNoSpectacle[nbEl] = Integer.parseInt(ligne.substring(0,5));
      tabDescript[nbEl] = ligne.substring(6,26);
      tabPrix[nbEl] = Double.parseDouble(ligne.substring(27));
      nbEl += 1;
    }
 
 
    Container c = getContentPane();
    c. setLayout(new GridLayout(6,2,6,6));
 
    labelNoSpectacle = new JLabel("Numéro de spectacle : ",SwingConstants.RIGHT);
    champNoSpectacle = new JTextField();
    champNoSpectacle.addActionListener(this);
    c.add(labelNoSpectacle);
    c.add(champNoSpectacle);
 
    labelDescript = new JLabel("Description : ", SwingConstants.RIGHT);
    champDescript = new JTextField();
    champDescript.setEditable(false);
    c.add(labelDescript);
    c.add(champDescript);
 
    labelPrix = new JLabel("Prix : ", SwingConstants.RIGHT);
    champPrix = new JTextField();
    champPrix.setEditable(false);
    c.add(labelPrix);
    c.add(champPrix);
 
    labelNbBillet = new JLabel("Nombre de billets : ",SwingConstants.RIGHT);
    champNbBillet = new JTextField();
    champNbBillet.addActionListener(this);
    c.add(labelNbBillet);
    c.add(champNbBillet);
 
    labelTotal = new JLabel("Total : ", SwingConstants.RIGHT);
    champTotal = new JTextField();
    champTotal.setEditable(false);
    c.add(labelTotal);
    c.add(champTotal);
 
    boutonTerminer = new JButton("Terminer" );
    boutonTerminer.addActionListener(this);
    c.add(boutonTerminer);
 
    boutonInitialiser = new JButton("Initialiser" );
    boutonInitialiser.addActionListener(this);
    c.add(boutonInitialiser);
 
    setLocation(200,200);
    show();
 
  }
 
  public void actionPerformed(ActionEvent e)
  {
  int noSpectacle, nbBillet, posi;
  double tabTotal[] = new double[nbEl];
  String sortie ="";
 
  posi = 0;
 
    if (e.getSource() == champNoSpectacle)
    {
      noSpectacle = Integer.parseInt(champNoSpectacle.getText());
      posi = Outil.rechercheBinaire(noSpectacle,tabNoSpectacle,nbEl);
      if (posi == -1)
 JOptionPane.showMessageDialog(null,"Numéro de spectacle inexistant!","ERREUR",
 JOptionPane.ERROR_MESSAGE);
      else
      {
        champDescript.setText(tabDescript[posi]);
        champPrix.setText(Double.toString(tabPrix[posi]));
      }
 
    }
    else if (e.getSource() == champNbBillet && champNoSpectacle != null)
    {
      nbBillet = Integer.parseInt(champNbBillet.getText());
      tabTotal[posi] = nbBillet * tabPrix[posi];
      champTotal.setText(Double.toString(tabTotal[posi]));
    }
    else if (e.getSource() == boutonTerminer)
    {
    sortie += "TITRE SPECTACLE\t\tTOTAL BILLETS";
    for (int i = 0; i < nbEl; i++)
      sortie += tabDescript[i] +"\t\t" + tabTotal[i] +"\n";
 
    JTextArea aireSortie = new JTextArea(1,1);
    aireSortie.setText(sortie);
 
    JOptionPane.showMessageDialog(null, aireSortie,"Résultats de la journée",
    JOptionPane.INFORMATION_MESSAGE);
    System.exit(0);
    }
    else
    {
    champDescript.setText("" );
    champTotal.setText("" );
    champPrix.setText("" );
    champNbBillet.setText("" );
    champNoSpectacle.setText("" );
    }
 
  }
 
 
  public static void main(String[] args) throws IOException
  {
  FenetreSpectacle fenetreSpectacle = new FenetreSpectacle();
 
  fenetreSpectacle.addWindowListener
     (new WindowAdapter()
       {
    public void windowClosing(WindowEvent e)
    {
      System.exit(0);
    }
       } );
  }
 
}

Reply

Marsh Posté le 11-02-2001 à 22:47:12   

Reply

Marsh Posté le 11-02-2001 à 23:12:55    

Dans ta boule while, tu devrais ajouter && (nbEl < MAX_SPECTACLES)

Reply

Marsh Posté le 11-02-2001 à 23:18:55    

ok j'essais!

Reply

Marsh Posté le 11-02-2001 à 23:21:49    

toujours même erreur mais ton idée est très bonne vais vérifier dans le reste du programme si y aurait pas le même genre de situation ailleurs...  
 
d'autres idées?

Reply

Marsh Posté le 12-02-2001 à 23:29:34    

Oui, à mon avis, c'est un peu bête de borner la taille de taon tableau ne sachant pas a priori le nombre d'entrées que tu vas avoir dedans...
 
Utilise un objet ArrayList à la place (tu trouveras cette classe dans le package java/util, comme toutes les autres collections standards). C'est une sorte de tableau à taille variable (pour simplifier). Et tu fais un monArrayList.add() à chaque fois que tu veux ajouter une entrée à la fin de la liste.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed