如果语句不起作用,程序直接输入“else”语句

时间:2017-06-04 12:25:52

标签: java if-statement mouseover

我正在尝试编写一个检测“空闲”状态的程序,但我没有在代码中看到问题。有人可以帮我一个有用的提示吗?这是我的代码:

package idlestatus;

import java.awt.MouseInfo;

public class Idlestatus {

    public static void main(String[] args) throws InterruptedException {
        Integer firstPointX = MouseInfo.getPointerInfo().getLocation().x;
        Integer firstPointY = MouseInfo.getPointerInfo().getLocation().y;
        Integer afterPointX;
        Integer afterPointY;
        while (true) {
            Thread.sleep(10000);
            afterPointX = MouseInfo.getPointerInfo().getLocation().x;
            afterPointY = MouseInfo.getPointerInfo().getLocation().y;
            if (firstPointX == afterPointX && firstPointY == afterPointY) {
                System.out.println("Idle status");
            } else {
                System.out.println("(" + firstPointX + ", " + firstPointY + ")");
            }
            firstPointX = afterPointX;
            firstPointY = afterPointY;

        }

    }
}

2 个答案:

答案 0 :(得分:0)

If正在运作,但您的状况始终为false,因为您使用的是Integer而不是原始int。请注意,使用Object时,请使用.equals()方法而不是==进行比较。

因此:

if (firstPointX.equals(afterPointX) && firstPointY.equals(afterPointY)) {
    //your code...
}

有关==Object.equals()方法之间的差异,请参阅this

正如评论中所述,您始终可以将int用于此类目的,而不是Integer

有关Integerint之间的差异,请参阅this

答案 1 :(得分:0)

您正在比较两个对象的内存地址,即Integer对象(包装类)。

if (firstPointX == afterPointX && firstPointY == afterPointY) 

您要做的是比较这两个对象中的值。要做到这一点,你需要使用如下:

if (firstPointX.equals(afterPointX) && firstPointY.equals(afterPointY))

包装/覆盖类:

  • 每种基本数据类型都有一个包装类。
  • 原始类型是出于性能原因而使用(对您来说更好) 程序)。
  • 无法使用基本类型创建对象。
  • 允许一种创建对象和操纵基本类型的方法(即 转换类型)。

Exsample:

Integer - int
Double - double