我有一个数组,我现在每次要从中随机取两个值,要求随机取的这两个值永远不能相等,怎么弄
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;

解决方案 »

  1.   

    package com.csdn;import java.util.ArrayList;
    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;
    }
    }
      

  2.   

    public class RandomTest
    {
    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());
    }
      这是我刚做的,测试了一下,可以的,仅供参考楼主不妨试一试
      

  3.   

    java.util.Random r=new java.util.Random(); 这一句话有问题int i=(int)Math.floor(Math.random()*10); //获取0-9之间的数字
      

  4.   

    /**
     * 
     */
    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]);
    }}
      

  5.   

    因为是考虑数组下标问题.那么可以这样吧.import java.util.Random;public class RandomTest
    {
        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);
            }
        }
    }
      

  6.   

    public String getImg_url(){
    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;
    }
      

  7.   

    public String getImg_url(){
            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;
        }
    这样写是不对,我试过了,可以随出两个一样的
      

  8.   

    是外面先有一个for(int i=0;i<2;i++)
    {
    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] 
    }
      

  9.   

    我自己写的一个,可也有可能出现相同的
    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的这种情况
      

  10.   


    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()))];
      

  11.   


    这个不行吗,不可能重复的  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()))]);
            }
      

  12.   

    这个不行吗,不可能重复的 Java code
             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()))]);
                }你试过这个,怎么就不可能重复了,你多刷几次就能看见有重复的
      

  13.   

    code=java
    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
      

  14.   

    【code=Java】
    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】
      

  15.   

    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]); 试下发代码
      

  16.   

    楼主用HashSet hs = new HashSet();
    然后 hs.add(Object o);
    HashSet有去重的功能 . 比用for 好多啦,
      

  17.   

    个人感觉 用rand 好象会出现重复,如果加上判断语句可能会好一些!!
      

  18.   

    怎么还没有结贴呢这个10楼是正解,这样取不会重复的,而且不用循环,也不用多于的空间,试过了吗,过给分吧
        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]);
        }