java - 检查号码是否已存在

标签 java

我正在生成一个 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/

相关文章:

Java PDF生成库

java - 设计模式(命令模式),以避免出现多个if条件

java - 在tomcat 6.0中从jar文件读取静态资源时如何减少linux上打开文件句柄的数量?

java - 使用java将xml转换为xls

java - 使用 Scanner 类打印字符串

java - 创建和发送自定义事件

Java KeyListener - 如何检测是否按下了任何键?

java - logback 中的 MaxBackupIndex

java - 如何在 spring 应用程序上下文 xml 文件中调用带有几个参数的 java 方法

java - 编译android_x86 iso镜像时出错