【问题标题】:Force Java to use double instead of int强制 Java 使用 double 而不是 int
【发布时间】:2017-05-27 23:09:49
【问题描述】:

我有以下代码:

public void keyboard() {
    int sealX;
    double sealY;
    if (Greenfoot.isKeyDown("up")) {
        sealX = getX();
        sealY = getY();
        setLocation(sealX, (sealY - 1.25));
    }
    if (Greenfoot.isKeyDown("down")) {
        sealX = getX();
        sealY = getY();
        setLocation(sealX, (sealY + 1.25));
    }
}

最初,变量 sealY 是一个整数,如 sealX。但是,在下面的两个条件中,1 太小了,而 2 太大了。

该程序之前编译并运行良好。但是,一旦我将 sealY 更改为 double 并将在键盘输入上完成的操作更改为带小数(双精度)的数字,Java 就开始抛出错误 - 不兼容的类型:从 double 到 int 的可能有损转换

我以前曾见过这种情况,有时我不必要地使用双精度,而整数就足够了。但是,这里不是这种情况。一个整数是不够的。我发现这不是一个致命错误,更像是一个提示,但我的程序因此无法编译。

就个人而言,我认为编译器可以尝试提供帮助,但除此之外,无论我使用 double 还是 int,都与它无关。如果我坚持使用双精度,应该有一种方法可以覆盖编译器,特别是因为我不能在这里尝试使用整数。

我认为强制转换不会解决这个问题。有没有办法手动覆盖编译器并声明我知道我在做什么并且我希望 sealY 是双精度的?

编辑:

还有一些文档:

设置位置 公共无效setLocation(int x,int y) 为这个演员分配一个新的位置。这会将演员移动到指定位置。该位置被指定为世界中一个单元格的坐标。 如果此方法被覆盖,重要的是从覆盖方法中将此方法称为“super.setLocation(x,y)”,以避免无限递归。 参数: x - x 轴上的位置索引 y - y 轴上的位置索引 也可以看看: 移动(整数)

【问题讨论】:

  • 请发帖getX()我认为编译器可以尝试提供帮助,否则无论我使用 double 还是 int 都与它无关。编译代码编译器的唯一业务。
  • 哪一行给出了错误?或者,更好的是,您能否在一个最小的自包含程序中重现您正在尝试做的事情
  • @Joni 涉及很多代码和多个类,所以不幸的是我不这么认为。错误都与 setLocation 语句一致
  • 听起来 setLocation 接受 int 参数,而不是 double。由于精度很高,Java 不会自动将 double 转换为 int。听起来您想更改 setLocation 方法,以便它接受双精度而不是整数
  • 你为什么不认为强制转换可以解决问题?

标签: java double greenfoot variable-types


【解决方案1】:

铸造也不能解决您的问题 你必须使用:

sealY = getY().doubleValue();

如果 getY() 返回一个 int 你应该使用:

sealY = new Integer(getY()).doubleValue();

编辑:

看来你的 setLocation 函数看起来像 setLocation(int x, int y);

所以为了避免这个错误,你只能这样做:

setLocation(sealX, new Double(y + 1.25).intValue());

或者像 Radiodef 所说的那样

setLocation(sealX, (int) (y + 1.25));

这看起来像一个肮脏的把戏,但我不知道任何其他解决方案

【讨论】:

  • 这给了我错误“int不能被取消引用”。现在我实际上有 3 个错误而不是 2 个,虽然起初它似乎工作正常
  • getX() 返回一个 int 或 Integer ?
  • getX() 返回一个整数,因为这就是我使用它的方式,而且我认为没有问题。需要明确的是,getX() 需要是 int 而 getY() 需要是 double
  • 对不起,我正在写解决方案,请稍候;)
  • setLocation 需要 2 个 double 作为参数?好的 int 和 double ;)
猜你喜欢
  • 2012-08-17
  • 1970-01-01
  • 2016-06-28
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
相关资源
最近更新 更多