我将我的变量从整数更改为双精度,强制转换不起作用
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);
.
,通过提供专有名称和类型来改进您的代码
我这里有一段代码以前使用整数运行,但我想将几乎所有变量更改为 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);
.