我正在生成一个 40 到 50 之间的随机数。生成该数字后,我将其打印到屏幕上,并将其添加到 ArrayList
中。但是,如果该数字已存在于 ArrayList 中,则我会打印一条消息“此数字已存在于数组列表中”。所以代码不应该两次打印相同的数字。然而,由于某种原因,即使它存在于数组列表中,它也会不断打印相同的数字两次。我不确定我在这里做错了什么
import java.util.ArrayList;
import java.util.Random;
public class RandomNumber {
Random random = new Random();
int x;
int l;
public static void main(String[] args) {
RandomNumber r = new RandomNumber();
r.genNumber(50,40);
}
public void genNumber(int high, int low) {
x = random.nextInt(high-low)+low;
ArrayList<Integer> arl = new ArrayList<Integer>();
if(!arl.contains(x)) {
System.out.println(x);
arl.add(x);
} else if (arl.contains(x)) {
System.out.println("This is already in ArrayList");
}
}
}
最佳答案
您的代码中的逻辑已损坏。
首先,当您检查 if(!arl.contains(x))
时,arl
为空,因此此条件始终为 true。
更重要的是,如果您只想维护唯一的数字,请使用 Set
而不是 List
。这个集合应该是全局,即在genNumber
方法之外声明。下面的代码应该可以工作(未经测试,我保留了您的原始数据结构)。
import java.util.ArrayList;
import java.util.Random;
public class RandomNumber {
Random random = new Random();
int x;
int l;
ArrayList<Integer> arl;
public RandomNumber() {
arl = new ArrayList<>();
}
public static void main(String[] args) {
RandomNumber r = new RandomNumber();
r.genNumber(50,40);
}
public void genNumber(int high, int low){
x = random.nextInt(high-low)+low;
if(!arl.contains(x)) {
System.out.println(x);
arl.add(x);
} else {
System.out.println("This is already in ArrayList");
}
}
}
关于java - 检查号码是否已存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797398/