当前位置: 首页 > 知识库问答 >
问题:

错误:(83,42)java:不兼容的类型:从浮点数到int的可能有损转换[重复]

宋华美
2023-03-14

在尝试绘制图形时,我得到了下面的错误,我的x和y是FLoat类型。

 public void paint(Graphics g){
       for (int x = 0; x < lols.toArray().length-1; x++) {
          City a = lols.get(x);
          City b = lols.get(x +1);
          g.setColor(Color.BLACK);
          g.drawLine(a.getX(), a.getY(), b.getX(), b.getY());

       }

我得到的错误:

Error:(83, 42) java: incompatible types: possible lossy conversion from float to int

共有2个答案

乐正焕
2023-03-14

g.抽屉线方法采用四个整数。从错误中可以明显看出,城市的 getXgetY 方法返回浮点数

您需要以某种一致的方式将这些浮点数转换为 ints,具体取决于这些浮点数中的值的范围。如果范围与 drawLine 的预期范围匹配,则可以将它们转换为 int

g.drawLine((int)a.getX(), (int)a.getY(), (int)b.getX(), (int)b.getY());

例如,如果数字不能很好地转换,因为getXgetYreturn numbers in the range-100..100,并且您想在800 x 600画布上绘制它们,那么可以添加用于缩放和/或将 转换为 int

private static int translateX(float x) {
    // converting from range -100..100 to 0..800
    return (int)(4*(x+100));
}
...
g.drawLine(translateX(a.getX()), translateY(a.getY()), translateX(b.getX()), translateX(b.getY()));

宋铭
2023-03-14

Java不允许您将浮点数s分配给ints,因为正如错误消息所述,您可能会丢失那里的数据(小数点后的所有内容)。如果您不能将xy值更改为ints(这是最有意义的),您可以通过将浮点数s显式转换为ints来克服此错误,表示潜在的数据丢失是故意的,并且您愿意拥有它:

g.drawLine((int) a.getX(), (int) a.getY(), (int) b.getX(), (int) b.getY());
// Here ---^---------------^---------------^---------------^
 类似资料: