我将我的变量从整数更改为双精度,强制转换不起作用

I changed my variables from integer to double, cast doesn't work

我这里有一段代码以前使用整数运行,但我想将几乎所有变量更改为 double。 这是我 运行 时遇到的异常:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer
    at Panel.actionPerformed(Panel.java:103)
    at javax.swing.Timer.fireActionPerformed(Unknown Source)
    at javax.swing.Timer$DoPostEvent.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access0(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(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)

这是我修改后的代码:

public class Panel extends JPanel implements ActionListener {
    double rand, lastrand, max, min, total, degr, average;
    ArrayList < Double > randL = new ArrayList < > ();
    ArrayList < Integer > tL = new ArrayList < > ();
    int lastT = 0;
    Color red = new Color(255, 0, 0);
    Color green = new Color(0, 200, 0);
    Color blue = new Color(0, 0, 200);
    Color yellow = new Color(200, 200, 0);
    int i, k, inc, j;
    public Panel() {
        super();
    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setStroke(new BasicStroke(1.8f));
        g2.drawLine(20, 20, 20, this.getHeight() - 50);
        g2.drawLine(20, this.getHeight() - 50, this.getWidth() - 50, this.getHeight() - 50);
        g2.drawLine(20, 20, 15, 35);
        g2.drawLine(20, 20, 25, 35);
        g2.drawLine(this.getWidth() - 50, this.getHeight() - 50, this.getWidth() - 65, this.getHeight() - 45);
        g2.drawLine(this.getWidth() - 50, this.getHeight() - 50, this.getWidth() - 65, this.getHeight() - 55);
        g.drawString("10", 0, this.getHeight() - 85);
        g.drawString("20", 0, this.getHeight() - 125);
        g.drawString("30", 0, this.getHeight() - 165);
        g.drawString("40", 0, this.getHeight() - 205);
        g.drawString("50", 0, this.getHeight() - 245);
        g2.drawString("Maximum: ", 20, this.getHeight() - 20);
        g2.drawString(Double.toString(max), 80, this.getHeight() - 20);
        g2.drawString("Minimum: ", 140, this.getHeight() - 20);
        g2.drawString(Double.toString(min), 200, this.getHeight() - 20);
        g2.drawString("Average: ", 260, this.getHeight() - 20);
        g2.drawString(Double.toString(average), 320, this.getHeight() - 20);
        g2.setColor(red);
        g2.drawLine(500, this.getHeight() - 25, 540, this.getHeight() - 25);
        g2.setColor(new Color(0, 0, 0));
        g2.drawString(":  Maximum", 560, this.getHeight() - 20);
        g2.setColor(blue);
        g2.drawLine(640, this.getHeight() - 25, 680, this.getHeight() - 25);
        g2.setColor(new Color(0, 0, 0));
        g2.drawString(":  Minimum", 700, this.getHeight() - 20);
        g2.setColor(green);
        g2.drawLine(780, this.getHeight() - 25, 820, this.getHeight() - 25);
        g2.setColor(new Color(0, 0, 0));
        g2.drawString(":  Average", 840, this.getHeight() - 20);
        if (!randL.isEmpty()) {
            g2.setColor(red);
            g2.drawLine(15, this.getHeight() - 50 - ((int) max), this.getWidth() - 50, this.getHeight() - 50 - ((int) max));
            g2.setColor(blue);
            g2.drawLine(15, this.getHeight() - 50 - ((int) min), this.getWidth() - 50, this.getHeight() - 50 - ((int) min));
            g2.setColor(green);
            g2.drawLine(15, this.getHeight() - 50 - ((int) average), this.getWidth() - 50, this.getHeight() - 50 - ((int) average));
        }
        for (i = 0; i < tL.size(); i++) {
            double temp = randL.get(i);
            int t = tL.get(i);
            g2.setColor(new Color(0, 0, 0));
            g2.drawLine(20 + t, this.getHeight() - 50 - ((int) temp), 20 + t, this.getHeight() - 50);
        }
        inc = 0;
        for (j = 0; j < 5; j++) {
            inc = inc + 40;
            g2.setColor(new Color(0, 0, 0));
            g2.drawLine(18, this.getHeight() - 50 - inc, 22, this.getHeight() - 50 - inc);
        }
    }@Override
    public void actionPerformed(ActionEvent e) {
        rand = (Math.random() * (60));
        lastT += 80;
        randL.add(rand);
        tL.add(lastT);
        Object obj = Collections.max(randL);
        max = (int) obj;
        Object obj2 = Collections.min(randL);
        min = (int) obj2;
        if (!randL.isEmpty()) {
            degr = randL.get(k);
            total += degr;
            average = total / randL.size();
        }
        k++;
        if (randL.size() >= 12) {
            randL.removeAll(randL);
            tL.removeAll(tL);
            lastT = 0;
            k = 0;
            degr = 0;
            total = 0;
            average = 0;
        }
        System.out.println("ça marche");
        repaint();
    }
}

有什么想法吗?

您正在尝试使用 max = (int) obj;.

Double 转换为 Integer(通过 int 转换拆箱)

而不是使用原始对象,谁知道是什么原因

Object obj = Collections.max(randL);,使用 Double maxRandL = Collections.max(randL);.

,通过提供专有名称和类型来改进您的代码