我有一个数组,我现在每次要从中随机取两个值,要求随机取的这两个值永远不能相等,怎么弄
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
String name="";
int num =0;
java.util.Random r=new java.util.Random();
String img_url="";
num=r.nextInt(100)%3;
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
String name="";
int num =0;
java.util.Random r=new java.util.Random();
String img_url="";
num=r.nextInt(100)%3;
import java.util.List;import com.sun.java_cup.internal.internal_error;public class RondomTwo {
static String[] imglist1 = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
//转为LIST
static List imagList = toList(imglist1);
static List listnew = new ArrayList();
static int flag = imagList.size();
//输出2个
static int result = 2;
public static void main(String[] args) {
List<String> list = getTwoString();
for(String s :list){
//获取
System.out.println(s);
}
}
public static List getTwoString(){
flag--;
result--;
String code = null;
for(int i = 0;i<imagList.size()&&result>=0;i++) {
//随机获得一个
int charIndex = (int) Math.floor(Math.random() * flag);
//加入
listnew.add(imagList.get(charIndex));
//加了后去掉
imagList.remove(charIndex);
//递归
getTwoString();
}
return listnew;
}
public static List toList(String[] a){
List list = new ArrayList();
for(int i = 0;i<a.length;i++){
list.add(a[i]);
}
return list;
}
}
{
public void set()
{
if(i!=j)
{
System.out.println(imglist[i]);
System.out.println(imglist[j]);
}
else
{
j=(int)(length*Math.random());
set();
}
}
public static void main(String[] args)
{
RandomTest first=new RandomTest();
first.set();
}
private String[] imglist =new String[] {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
private int length=imglist.length;
private int i=(int)(length*Math.random());
private int j=(int)(length*Math.random());
}
这是我刚做的,测试了一下,可以的,仅供参考楼主不妨试一试
*
*/
package com.powerf.study.test;/**
* @author fangwei
*
*//*我有一个数组,我现在每次要从中随机取两个值,要求随机取的这两个值永远不能相等,怎么弄
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"}; 您的题目中一个5个字符串。
我的思路是:1.首先从5中随机选择一个。
2.把选中的那个与最后一个交换。
3.再从前4个中随机选择一个。
*/
import java.util.Random;public class RondomSelectTwoString { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
RandomSelectString(imglist);
}
public static void RandomSelectString(String[] list){
Random r=new Random();
//从list.length个串中随机取一个串
int i = r.nextInt(list.length-1);
System.out.println(list[i]);
//取出的字符串与最后一个交换
String tempStr = list[i];
list[i]=list[list.length-1];
list[list.length-1]= tempStr;
//从前list.length-1随机取一个串
i = r.nextInt(list.length-2);
System.out.println(list[i]);
}}
{
public void setRandom()
{
Random r=new Random();
int res1=r.nextInt(6);//产生一个0-6的随机整数,包括0不包括6
int res2=r.nextInt(6);
while(res2==res1)//如果两次产生的随机数相等,那么再次生成
{
res2=r.nextInt(6);
}
}
}
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
Random r = new Random();
String imgUrl="";//取出的图片
int[] judge={0,0,0,0,0};//用来判断是否相等
int i=0;//取出图片的数量
int index=-1;//取出图片的索引号
while(i!=2){
index=r.nextInt(5);//取0-4的索引
if(judge[index]==0){ //等于0时表示还未被取出
imgUrl+=imglist[index];
judge[index]=1; //设置取出状态为1
i++; //取出的个数+1
}
}
return imgUrl;
}
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
Random r = new Random();
String imgUrl="";//取出的图片
int[] judge={0,0,0,0,0};//用来判断是否相等
int i=0;//取出图片的数量
int index=-1;//取出图片的索引号
while(i!=2){
index=r.nextInt(5);//取0-4的索引
if(judge[index]==0){ //等于0时表示还未被取出
imgUrl+=imglist[index];
judge[index]=1; //设置取出状态为1
i++; //取出的个数+1
}
}
return imgUrl;
}
这样写是不对,我试过了,可以随出两个一样的
{
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
String name="";
int num =0;
java.util.Random r=new java.util.Random();
String img_url="";
num=r.nextInt(100)%3;
我要循环一次出一个不同的imglist[i]
}
for(int j=0;j<2;j++){
int base=2;
int set=2;
if(j==1){
base=0;
set=3;
}
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
String name="";
int num =0;
java.util.Random r=new java.util.Random();
String img_url="";
num=r.nextInt(100)%3;
name=imglist[num+base];
}
我每次都从0,1,2中随数,第一次循环让base=2,j==1第二次循环时让base=0;然后在去加num+base,可也会出现2+0和0+2都是2的这种情况
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"}; ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0; i<imglist.length; i++) {
list.add(i);
} //循环里取出这个就行了imglist[list.remove((int)(Math.random()*list.size()))];
这个不行吗,不可能重复的 String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"}; ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0; i<imglist.length; i++) {
list.add(i);
}
for(int i=0; i<2; i++) {
System.out.println(imglist[list.remove((int)(Math.random()*list.size()))]);
}
String[] imglist = {"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"}; ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0; i<imglist.length; i++) {
list.add(i);
}
for(int i=0; i<2; i++) {
System.out.println(imglist[list.remove((int)(Math.random()*list.size()))]);
}你试过这个,怎么就不可能重复了,你多刷几次就能看见有重复的
int i,j;
String[] string={"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
for(;;){
i=(int)(string.length*Math.random());
j=(int)(string.length*Math.random());
if(i!=j)break;
}
System.out.print(string[i]+" "+string[j]);
/code
int i,j;
String[] string={"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
for(;;){
i=(int)(string.length*Math.random());
j=(int)(string.length*Math.random());
if(i!=j)break;
}
System.out.print(string[i]+" "+string[j]);
【/code】
String[] string={"PV1.gif","PV2.gif","PV3.gif","PV4.gif","PV5.gif"};
for(;;){
i=(int)(string.length*Math.random());
j=(int)(string.length*Math.random());
if(i!=j)break;
}
System.out.print(string[i]+" "+string[j]); 试下发代码
然后 hs.add(Object o);
HashSet有去重的功能 . 比用for 好多啦,
public static void RandomSelectString(String[] list){
Random r=new Random();
//从list.length个串中随机取一个串
int i = r.nextInt(list.length-1);
System.out.println(list[i]);
//取出的字符串与最后一个交换
String tempStr = list[i];
list[i]=list[list.length-1];
list[list.length-1]= tempStr;
//从前list.length-1随机取一个串
i = r.nextInt(list.length-2);
System.out.println(list[i]);
}