[英]Checking if number already exists
我正在生成一個40到50之間的隨機數。生成該數字后,將其打印到屏幕上,然后將其添加到ArrayList
。 但是,如果該數字已存在於ArrayList
那么我將顯示一條消息"This number already exists in Array List"
。 因此,該代碼永遠不應打印兩次相同的數字。 但是由於某種原因,即使數組列表中存在相同的數字,它也會打印兩次相同的數字。 我不確定我在做什么錯
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
。 並且此集合應該是global ,即在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");
}
}
}
您需要使ArrayList成為一個字段,而不是局部變量。 這樣,可以在方法調用之間重用它(只要您使用相同的RandomNumber實例)。 在您當前的實現中,跟蹤已生成數字的ArrayList在方法末尾被丟棄。
這有效:
import java.util.ArrayList;
import java.util.Random;
public class RandomNumber {
Random random = new Random();
int x;
int l;
ArrayList<Integer> arl = new ArrayList<Integer>();
public static void main(String[] args) {
RandomNumber r = new RandomNumber();
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
//r = new RandomNumber(); // created a new one - uncommenting this line will mean the List is lost and we will generate duplicates.
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
r.genNumber(50,40);
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 if(arl.contains(x)){
System.out.println("This is already in ArrayList");
}
}
}
實際上,我認為您誤會了錯誤。 每次調用您的方法時,您都在創建一個全新的ArrayList,因此它始終以空開頭。 因此,向其添加隨機數沒有問題。
要解決此問題,您需要將arl移出該方法,以便僅創建一次即可繼續使用,直到應用程序完成(或直到您完成存儲隨機數)為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.