2016-04-30 1 views
-1

J'essaie de créer une calculatrice intégrale qui affiche un polynôme aléatoire, un intervalle aléatoire et l'intégrale définie de ce polynôme de l'intervalle aléatoire.Array Index Fonctionne dans JApplet mais pas JFrame

J'ai déjà écrit le code avec l'objectif final d'afficher la réponse sur un JApplet, mais maintenant, après quelques complications, je dois maintenant afficher ma réponse sur JFrame.

Ce qui suit est ma classe intégrale

package poopeep; 

import java.math.RoundingMode; 
import java.text.DecimalFormat; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 

import javax.swing.JComponent; 
import javax.swing.JFrame; 

public class Integral 
{ 
    public Integral() 
    { 
     generator = new Random(); 

     degree = generator.nextInt(5)+1; 

     left = generator.nextInt(11); 
     right = generator.nextInt(11) + left + 1; 

     xlist = new ArrayList<Integer>(); 
    } 

    public double calc() 
    { 
     double interval = right - left; 
     double dx = interval/10000000; 
     double area = 0; 

     // Generates random coefficients 
     for (int d = 0; d <= degree; d++) 
     { 
      int coeff = generator.nextInt(21) - 10; 
      xlist.add(coeff); 
     } 

     for (double i = left; i < right; i += dx) 
     {    
      double x = i + dx/2; 
      for (int d = degree; d >= 0; d--) 
      { 
       double areaOfSingleRect = (xlist.get(d) * Math.pow(x, d)) * dx; 
       area += areaOfSingleRect; 
      } 
     } 

     DecimalFormat round = new DecimalFormat("##.##"); 
     round.setRoundingMode(RoundingMode.DOWN); 
     return Double.parseDouble(round.format(area)); 
    } 

    public String getEquation() 
    { 
     String equation = ""; 
     for (int d = degree; d >= 0; d--) 
     { 
      equation = equation + String.valueOf(xlist.get(d)) + "x^" + String.valueOf(d) + " + "; 
     } 
     return equation; 
    } 

    public String getLeft() 
    { 
     String leftString = String.valueOf(left); 
     return leftString; 
    } 

    public String getRight() 
    { 
     String rightString = String.valueOf(right); 
     return rightString; 
    } 

    private int left; 
    private int right; 
    private int degree; 
    private Random generator; 
    private List<Integer> xlist; 
} 

Ce qui suit est ma classe de test

package poopeep; 

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JApplet; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class IntegralTest extends JApplet 
{ 
    public static void main(String[] args) 
    { 
     Integral myIntegral = new Integral(); 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(600,600); 
     frame.setTitle("Integral"); 
     frame.setVisible(true); 

     JPanel panel = new JPanel(); 

    // JLabel bounds = new JLabel("From " + myIntegral.getLeft() + " to " + myIntegral.getRight()); 
    // JLabel answer = new JLabel(String.valueOf(myIntegral.calc())); 
     JLabel equation = new JLabel(myIntegral.getEquation()); 

    // panel.add(bounds); 
    // panel.add(answer); 
     panel.add(equation); 

     frame.add(panel); 


    } 
} 

Désolé pour le code désordre, les importations non utilisées, etc.

Dans ma classe de test, J'ai fondamentalement commenté le code JFrame et laissé le code JApplet en cours d'exécution. Lorsque j'exécute le programme avec le code JApplet, le programme fonctionne parfaitement comme je le souhaite.

Cependant, quand je passer à l'aide du code JFrame (et je transmets JComponent en classe intégrale, etc.) Eclipse me donne une erreur disant que mes index de liste, ligne 59, sont hors d'usage, même si Je n'ai rien changé dans la classe Integral.

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 0 
    at java.util.ArrayList.rangeCheck(Unknown Source) 
    at java.util.ArrayList.get(Unknown Source) 
    at poopeep.Integral.getEquation(Integral.java:59) 
    at poopeep.IntegralTest.main(IntegralTest.java:27) 

Quel est le problème? Merci

+2

Postez le code qui ne fonctionne pas, pas le code qui fonctionne. Supprimez tout le code non pertinent. Et ne paraphrasez pas les messages d'erreur. Postez-les, mot pour mot, complètement. –

Répondre

0

La trace de la pile montre que vous essayez d'accéder à l'élément à l'index 2 de xlist, dans la méthode getEquation(), et que la taille de cette liste est 0.

Et en effet, est xlist peuplé dans calc(), mais votre code n'appelle jamais calc(), donc la liste est vide.

+0

Je vois. Cependant, lorsque j'appelle calc(), rien ne s'affiche sur la fenêtre JFrame. – awdreg