错误:(83,42)Java:不兼容的类型:可能从浮点到int的损失转换



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

 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

java不会让您将float s分配给int s,因为正如错误消息所述,您可能会在此处丢失数据(小数点之后的所有内容(。如果您无法将xy值更改为int S(最有意义的是最有意义的(,则可以通过明确float s施放到int s,并表示该错误潜在的数据丢失是有意的,您愿意拥有:

g.drawLine((int) a.getX(), (int) a.getY(), (int) b.getX(), (int) b.getY());
// Here ---^---------------^---------------^---------------^

g.drawLine(...)方法需要四个整数。从CitygetXgetY方法返回float

从错误中可以明显看出。

您需要以某种一致的方式将这些float s转换为int s,具体取决于这些float s的值范围。如果该范围与drawLine预期的匹配,则可以将它们投射到int

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

例如,如果数字不能很好地翻译,则是因为getXgetY返回数字-100..100的返回数字,并且您想在800 x 600个画布上绘制它们,请添加用于缩放和/或翻译的方法floatint,例如

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

最新更新