2 oiu1010110 oiu1010110 于 2016.04.19 21:40 提问

Java 集合为什么只能加一个数进去 就在while里面出不来呢?
List<Rational>rationalList = new ArrayList<>();
    Random random = new Random();
    Rational rational = new Rational();
    //产生原分数集合
    for(int i = 0;i < 10;i++){
        do{
            rational.denominator = random.nextInt(Integer.MAX_VALUE);
            rational.numerator = random.nextInt(Integer.MAX_VALUE);
        }while(rationalList.contains(rational));

        rationalList.add(rational);
    }

2个回答

oiu1010110
oiu1010110   2016.04.23 19:11
已采纳

ListrationalList = new ArrayList<>();
Random random = new Random();
Rational rational;
//产生分数集合
for(int i = 0;i < 10;i++){
do{

int dm = random.nextInt();
int nm = random.nextInt();
rational = new Rational(nm,dm);

        }while(rationalList.contains(rational)); 

        rationalList.add(rational);

    }
    //已解决
caozhy
caozhy   Ds   Rxr 2016.04.20 00:20

rationalList.contains(rational)
这里比较的是引用。
你需要重写Rational的hashCode和equals,使得相同的分数返回true

oiu1010110
oiu1010110 我直接用生成的hashCode和equals方法,但是我调式的发现的问题是它每次遇到的是equals方法里的第一句if (this == obj) return true;就返回truel,然后就出不来
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!