提问者:小点点

java从float到int的可能有损转换[重复]


我试图在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之前我已经尝试过添加(float)到,但是对我不起作用。谷歌也帮不上什么忙,或者说我搜索得不够多。如果有人能为我提供某种解决方案,我将不胜感激。

非常感谢。


共1个答案

匿名用户

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

方法

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

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

(getWidth()*i)

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

有几种方法可以解决这个问题,但由于您的代码还有其他几个问题(例如 i = 1/7),这里最好的办法是尝试了解有关 java 基础的更多信息,例如遵循此处。