【问题标题】:java possible lossy conversion from float to int [duplicate]java可能从float到int的有损转换[重复]
【发布时间】:2017-11-07 23:03:11
【问题描述】:

我正在尝试在 Textpad 中编译此 Java 程序,但出现以下错误

C:\Users\User\Desktop\java\Drawing.java:14:错误:不兼容的类型:从浮点数到整数的可能有损转换 g.drawLine ((getWidth()/2) , 0, (getWidth()*i) , (getHeight()/2));

这里是代码

import javax.swing.*;
import java.awt.*;
import java.util.Random;

public class Drawing extends JPanel
{
    public void painComponent(Graphics g)
    {
        super.paintComponent (g);
        for (float i=0; i<=1; i+=1/7)
        {
            Random r=new Random();
            g.setColor(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
            g.drawLine ((getWidth()/2) , 0, (getWidth()*i) , (getHeight()/2));
        }
        g.drawLine(0,getHeight()/2, getWidth()/2, getHeight()/2);
        g.drawLine(getWidth(), getHeight()/2, getWidth()/2, getHeight());
    }  

    public static void main(String args[])
    {
        Drawing d=new Drawing();
        JFrame frame=new JFrame();
        frame.add(d);
        frame.setSize(600,600);
        frame.setTitle("Drawing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

我尝试在 getWidth*i 之前添加 (float),但它对我不起作用。 谷歌也没有太大帮助,或者我搜索得不够。如果有人可以为我提供特定的解决方案,我将不胜感激。

谢谢

【问题讨论】:

  • 你到底在做什么迭代浮点数?您的循环可能不会超过 1。
  • 请注意i+=1/7 引入了整数除法,因此1/70四舍五入 到接近零)。你应该改用1.0/7.0 或类似的东西。
  • 旁注:在要覆盖的方法上使用@Override 是个好主意,正是因为它允许编译器捕获像public void painComponent 这样的拼写错误。只要你的方法是这样拼写的,它就永远不会被调用。

标签: java


【解决方案1】:

粗略地说,编译器是声明的,因为您试图在没有强制转换的情况下进行窄转换。看到这个link

方法

drawLine(int x1, int y1, int x2, int y2)

需要 4 个 int 作为参数,但您提供了一个浮点数作为第三个参数,因为

(getWidth()*i)

是一个 int 和一个 float(i 变量)的乘积,结果是一个浮点数(它被称为提升,参见上面的链接)。

有几种方法可以解决这个问题,但是由于您的代码还有其他几个问题(例如 i+=1/7),因此最好在这里尝试了解更多有关 java 基础的知识,例如关注 here .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2014-03-16
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    相关资源
    最近更新 更多