我有一个函数,它采用一个整数数组和一个布尔数组.如果Integer数组中的值为最高值且boolean数组为true,则trackerArray中的值设置为true.这是我的代码的简化版本,产生错误......
package com.thisis.a.test;
public class ThisIsATest {
public static void main(String[] args){
Integer[] integerArray = new Integer[]{75,200,75,200,75};
boolean[] booleanArray = new boolean[]{false,true,false,true,false};
boolean[] trackerArray = new boolean[]{false,false,false,false,false};
Integer iHighestSum = 0;
for(int c = 0; c < booleanArray.length; c++){
if(booleanArray[c] == true)
if(integerArray[c] > iHighestSum)
iHighestSum = integerArray[c];
}
for(int c = 0; c < booleanArray.length; c++){
if(booleanArray[c] == true)
if(integerArray[c] == iHighestSum)
trackerArray[c] = true; // this if statement should be called twice
}
// trackerArray should be {false,true,false,true,false}
// instead it is {false,true,false,false,false}
}
}
Run Code Online (Sandbox Code Playgroud)
trackerArray应为{false,true,false,true,false},而不是{false,true,false,false,false}.if语句应该被触发两次,而只是触发一次.为什么是这样?
您应该使用比较对象引用的Integer.equals()值,而不是比较值Integer == Integer.您当前的代码字面上说"是与200的第一个实例相同的实例 200的第二个实例"
两种选择:
int即int iHighestSum = 0;Java将自动取消整理 Integer以获取其int值,然后您将进行比较ints,因此它有效使用==equals(): if(integerArray[c].equals(iHighestSum))作为一个有趣的旁注,如果您将值更改200为127(或更少),您的代码将通过.这是因为JVM在Integer类中保留了固定的,可重用的对象,用于-128到127之间的所有值(即"字节"),即Integer[] integerArray = new Integer[] { 75, 127, 75, 127, 75 };通过!
总而言之,这些更改中的任何一个都将使您的代码正常运行:
...
int iHighestSum = 0;
...
if(integerArray[c].equals(iHighestSum))
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |