数组索引在JApplet中工作,但不在JFrame中工作

时间:2016-04-30 22:20:51

标签: java list arraylist jframe japplet

我试图创建一个积分计算器,显示随机多项式,随机区间和随机区间的多项式的定积分。

我之前编写的代码的最终目标是在JApplet上显示答案,但现在经过一些复杂的操作后,我现在需要在JFrame上显示我的答案。

以下是我的Integral类

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;
}

以下是我的测试类

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);


    }
}

很抱歉杂乱的代码,未使用的导入等等。

在我的测试类中,我基本上注释掉了JFrame代码并使JApplet代码保持运行。当我使用JApplet代码运行程序时,程序完全按照我的要求运行。

然而,当我切换到使用JFrame代码(我在Integral类中扩展JComponent等)时, Eclipse给出了一个错误,说我的列表索引,第59行,不在顺序,即使我在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)

有什么问题?谢谢

1 个答案:

答案 0 :(得分:0)

堆栈跟踪显示您在方法getEquation()中尝试访问xlist索引2处的元素,并且该列表的大小为0。

实际上,xlist是在calc()中填充的,但是你的代码从不调用calc(),所以列表是空的。