为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我会重复?

package com.project;


import java.util.List;

import java.util.Random;

import java.util.ArrayList;

import java.util.Collections;



public class Imath {



Integer k;

public void testSort(){

List<String> stringlist=new ArrayList<String>();

Random random=new Random();

for(int i=0;i<10;i++){

do{

k=random.nextInt(10);

}while(stringlist.contains(k));

String b=String.valueOf(k);

stringlist.add(b);

}

System.out.println("~~~~~~~~~~排序前~~~~~~~");

for(String str:stringlist){

System.out.println("元素:"+str);

}

Collections.sort(stringlist);

System.out.println("~~~~~~~~~~排序后~~~~~~~");

for(String str:stringlist){

System.out.println("元素:"+str);

}

}


public static void main(String[] args) {


Imath math=new Imath();

math.testSort();

}


}


正在回答

2 回答

判断重复可以换成 stringlist.contains(k+"");

contains比较的是equals的返回值

List<String> list = new ArrayList<String>();
list.add("1");
System.out.println(list.contains("1"));//true
System.out.println(list.contains(1));//false

这个你未必能理解,但是简单说一下,有可能越解释越糊涂

比如list.contains(1)
contains方法会把 1变成new Integer(1);//对象型

Integer i = new Integer(1);

然后判断对象的equals,

i.equas("1");//false

0 回复 有任何疑惑可以回复我~
#1

evil啊啊啊 提问者

所以这里我没有错啊。为什么还是会重复。。
2015-08-12 回复 有任何疑惑可以回复我~
#2

evil啊啊啊 提问者

所以这里我没有错啊。为什么还是会重复。。
2015-08-12 回复 有任何疑惑可以回复我~
#3

evil啊啊啊 提问者

非常感谢!
2015-09-11 回复 有任何疑惑可以回复我~

while(stringlist.contains(k+"")); // while(stringlist.contains(k)); 这行有问题

要是直接把错误点出来就太没意思了

0 回复 有任何疑惑可以回复我~
#1

evil啊啊啊 提问者

当K值包含在集合中,重新生成一个K值。没错啊。。。。。
2015-08-13 回复 有任何疑惑可以回复我~
#2

管理員 回复 evil啊啊啊 提问者

还要我怎么解释,while(stringlist.contains(k)); 这行有问题,改成while(stringlist.contains(k+""));
2015-08-13 回复 有任何疑惑可以回复我~
#3

evil啊啊啊 提问者 回复 管理員

谢谢。可以了。但是还是不明白。为什么要这样改。
2015-08-13 回复 有任何疑惑可以回复我~
#4

evil啊啊啊 提问者 回复 管理員

我明白啦!谢谢!
2015-08-13 回复 有任何疑惑可以回复我~
#5

森特 回复 evil啊啊啊 提问者

因为k是个int类型的数,加了+""之后就转变成String类型了
2016-04-19 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消

为什么我会重复?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信