1

我正在创建一个程序,允许您轻松创建饼图。在删除切片的方法中,for 循环内的 if 语句不执行,我不知道为什么会发生这种情况。这是 removeSlice 方法:

public void removeSlice(Color color, float size, String displayText){
        int num = 0;
        System.out.println("Thing: " + color + " " + size + " " + displayText);
        for(int i = 0; i < slice.size(); i++){
            System.out.println("I: " + slice.get(i).color + " " + slice.get(i).size + " " + slice.get(i).text + " Current: " + i);
            if(slice.get(i).color == color && slice.get(i).size == size && slice.get(i).text.equals(displayText)){
                num = i;
                System.out.println("It Works");
            }
        }
        System.out.println(num);
        slice.remove(slice.get(num));
        totalSize -= size;
        --current;
    }

尝试删除切片时,控制台输出显示此

Thing: java.awt.Color[r=255,g=255,b=255] 100.0 Hey
I: java.awt.Color[r=0,g=0,b=0] 500.0 Hi Current: 0
I: java.awt.Color[r=255,g=153,b=153] 70.0 Hello Current: 1
I: java.awt.Color[r=255,g=255,b=255] 100.0 Hey Current: 2
I: java.awt.Color[r=153,g=153,b=0] 120.0 Hola Current: 3
0

如您所见,所有值都等于 ArrayList 中位置 2 的值,但 if 语句仍然没有执行。

4

7 回答 7

4

您正在将颜色与 == 进行比较。改用等于。== 检查对象是否引用内存中的同一位置。您创建了两种颜色,但内容相同 - 然后,您必须使用 equals 检查内容是否匹配。

于 2013-10-08T14:33:31.790 回答
2

您需要修改 slice.get(i).color == colorslice.get(i).color.equals(color).

您应该使用.equals()方法来比较颜色对象。

if(slice.get(i).color.equals(color) && slice.get(i).size == size && slice.get(i).text.equals(displayText)){
                num = i;
                System.out.println("It Works");
            }
于 2013-10-08T14:34:23.637 回答
1

除了 Color 的 == 问题外,float 的精确相等比较也会产生问题。如果被比较的值是由完全相同的计算产生的,或者所有涉及的计算都是精确的,它将起作用。如果不是,则可能存在不同的舍入误差,从而导致在实数算术中相等的值的非常小的差异。

小的整数值浮点数(例如 100.0)确实代表整数,所以这可能不是您当前的问题,但它可能会给您带来不同数字的问题。

于 2013-10-08T14:39:21.797 回答
0

作为一名 Java 程序员,您应该了解equals。这通常是你真正想要的。

于 2013-10-08T14:33:47.790 回答
0

尝试用“equals”比较不同的值,而不用“==”比较

于 2013-10-08T14:35:29.917 回答
0

您需要对 Color 对象使用 equals() 而不是 == 。

于 2013-10-08T14:35:33.853 回答
0

很难说,因为我们看不到完整的源代码,但我认为您的问题出在“slice.get(i).color == color”。使用 == 可以测试两个变量是否引用同一个对象。

您应该考虑使用 slice.get(i).color.equals(color) 并且您还需要在该对象上实现 equals、hashCode 方法

于 2013-10-08T14:40:38.623 回答