簡體   English   中英

檢查號碼是否已經存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM