我试图创建一个积分计算器,显示随机多项式,随机区间和随机区间的多项式的定积分。
我之前编写的代码的最终目标是在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)
有什么问题?谢谢
答案 0 :(得分:0)
堆栈跟踪显示您在方法getEquation()中尝试访问xlist索引2处的元素,并且该列表的大小为0。
实际上,xlist是在calc()中填充的,但是你的代码从不调用calc(),所以列表是空的。