我有一个整数的数组列表,我想检查该列表上的特定数据是否与声明的变量相同,但是,如果我使用if(variable == arraylist.get(i)
它不起作用,我试图找到将列表转换为整数的方法,但我找不到合适的解决方案。
public static void main(String[] args) {
List reg = new ArrayList();
//int add;
reg.add(2);
reg.add(5);
reg.add(6);
Random rand = new Random();
int newReg = rand.nextInt(4)+1;
for(int i = 0; i < reg.size(); i++){
if(newReg == reg.get(i)){
//do stuff
}
}
}
答案 0 :(得分:0)
问题是autoboxing隐藏了Java中的primitve类型和引用类型之间的转换。它通常很顺利,但在这种情况下,您将对象引用与整数进行比较。请尝试以下方法:
public static void main(String[] args) {
List<Integer> reg = new ArrayList<>();
//int add;
reg.add(2);
reg.add(5);
reg.add(6);
Random rand = new Random();
int newReg = rand.nextInt(4)+1;
for(int i = 0; i < reg.size(); i++){
if(newReg == reg.get(i).intValue()){
//do stuff
}
}
}
答案 1 :(得分:0)
当你执行reg.get(i)它返回对象时。你有多个选择: A.将列表定义为整数列表,即列表reg = new ArrayList(); B.将强制转换对象输入int。
首选选项是A.
答案 2 :(得分:-1)
我刚刚尝试过您的代码,而在Netbeans中,它会在您比较的行中显示错误。一般规则是永远不要你&#34; ==&#34;在比较任何引用类型时(除非您确实要检查它是否是相同的对象),请改用equals()。以下是:
List reg = new ArrayList();
//int add;
reg.add(2);
reg.add(5);
reg.add(6);
Random rand = new Random();
int newReg = rand.nextInt(4) + 1;
for (int i = 0; i < reg.size(); i++) {
if (reg.get(i).equals(newReg)) {
System.out.println("aa");
}
}