java可能有损转换从float到int

时间:2017-11-07 23:03:12

标签: java

我试图在Textpad中复制这个Java程序,但是我收到了以下错误

  

C:\ Users \ User \ Desktop \ java \ Drawing.java:14:错误:不兼容的类型:从float到int的可能有损转换               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之前添加(浮动),但它对我没用。 谷歌也没有多大帮助,或者我还没有足够的搜索。如果有人能为我提供某种解决方案,我将非常感激。

谢谢

1 个答案:

答案 0 :(得分:1)

粗略地说编译器声称是因为你试图在没有强制转换的情况下进行窄转换。请参阅此link

方法

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

期望4个int作为参数,但是你提供一个浮点数作为第3个参数,因为

(getWidth()*i)

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

有几种方法可以解决这个问题,但由于你的代码有其他几个问题(比如i + = 1/7),这里最好的办法是尝试学习更多关于java的基础知识,比如跟{{3 }}