数组不是随机选择值并分成两个数组

时间:2016-10-31 00:48:29

标签: java arrays

我有一个动物的数组列表,点击“选择'按钮我 我想随机选择这些动物并将动物分成两部分  数组(拆分)称为' teamA和teamB'。这是我的代码,但我总是按照屏幕链接获得相同的数组列表?有人可以请  帮我解决问题?

    import java.lang.Math; 
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    import java.util.Random;

    public class RandomExample {

        private Random random = new Random();

        public static void main(String[] args) {
  // 'list' array list contains animals
            List<String> list = new ArrayList<String>();
            list.add("Tiger");
            list.add("Crocodile");
            list.add("Cat");
            list.add("Dog");
            list.add("Elephant");
            list.add("Lion");
            list.add("Deer");
            list.add("Eagle");

            RandomExample obj = new RandomExample();
            for(int i = 0; i < 10; i++){
               obj.getRandomList(list);
               List<String> teamA = list.subList(0, 4); 
               List<String> teamB = list.subList(4, 8); 
              System.out.println(teamA); 
              System.out.println(teamB);             

            }

        }

        public String getRandomList(List<String> list) {

            //0-4
            int index = random.nextInt(list.size());
            System.out.println("\nIndex :" + index );     
            return list.get(index);

        }

    }        

enter image description here

3 个答案:

答案 0 :(得分:0)

试试这个..它应该有用..

import java.lang.Math; 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;

import java.util.Random;

public class RandomExample {

    private Random random = new Random();

    public static void main(String[] args) {

        List<String> list = new ArrayList<String>();
        list.add("Tiger");
        list.add("Crocodile");
        list.add("Cat");
        list.add("Dog");
        list.add("Elephant");
        list.add("Lion");
        list.add("Deer");
        list.add("Eagle");

        RandomExample obj = new RandomExample();
        List<String> teamA = list.subList(0,4); 
        List<String> teamB = list.subList(4,8); 
        for(int i = 0; i < 10; i++){

            obj.getRandomList(list);
            teamA = list.subList(0,4); 
            teamB = list.subList(4,8); 
            Collections.rotate(teamA, 1);
            Collections.rotate(teamB, 1);
            System.out.println(teamA); 
            System.out.println(teamB);          

        }



    }

    public String getRandomList(List<String> list) {

        //0-4
        int index = random.nextInt(list.size());
        System.out.println("\nIndex :" + index );     
        return list.get(index);

    }

}

答案 1 :(得分:0)

致电obj.getRandomList(list);会返回String,但您不会对此做任何事情。我知道这个方法应该返回一个随机选择的项目。

  
      
  1. 要正确执行您要求的操作,您必须声明新的ArrayListtemp,然后将list分配给它。

  2.   
  3. 为避免重复同一个对象,您需要从创建的temp ArrayList中删除随机生成的项目。

  4.   
  5. 完成后,删除创建的temp ArrayList。

  6.   

我已根据我提出的建议对您的main方法进行了必要的更改。

       public static void main(String[] args) {
            // 'list' array list contains animals
            List<String> list = new ArrayList<String>();
            list.add("Tiger");
            list.add("Crocodile");
            list.add("Cat");
            list.add("Dog");
            list.add("Elephant");
            list.add("Lion");
            list.add("Deer");
            list.add("Eagle");

            RandomExample obj = new RandomExample();
            List<String> teamA = new ArrayList<String>(); 
            List<String> teamB = new ArrayList<String>();
            List<String> temp = list;

            String animal;

            for(int i = 0; i < 10; i++){
                if(temp.isEmpty() == false){
                    animal = obj.getRandomList(temp);
                    if(i <= 3){
                        teamA.add(animal);   
                    }else{
                        teamB.add(animal);
                    }
                    temp.remove(animal);
                    //System.out.println("temp is "+temp);
                }
            }
            temp.clear();
            System.out.println(teamA); 
            System.out.println(teamB); 

        }

答案 2 :(得分:0)

正如我所问,我不确定你为什么不从getRandomList()中捕获返回的字符串......我猜你在想这个列表被返回了吗?另一个问题是当你从列表中得到一个随机数时,你可以获得相同的数字。因此,您可能会在同一个团队中两个或两个以上同一动物获得相同的动物。当你把动物放在团队中时......你需要从列表中删除它们。

下面我创建两个团队。然后设置两个循环,每个团队一个。使用getRandomList方法获取随机动物,然后从列表中删除该动物。在我们有两个列表后,打印结果。希望这会有所帮助。

编辑:根据OP请求为团队提供不同数量的动物。

示例:为团队使用5只动物。

显然,在实际设置团队规模之前,最好先查看可用数据量。示例:如果您希望teamB拥有5而teamA拥有4,那么列表中最好至少有9只动物。因此,在开始循环之前检查团队规模。如果totalAnimalsForTeams大于列表中的动物数量或totalAnimalsForTeams小于2,那么我们需要向用户指出并退出。如果需要,此方法允许您仅使用列表的一部分。在下面的实现中,如果totalAnimalsForTeams是奇数,则第二个循环将具有额外的动物成员。

public class Main
{
  private static Random random = new Random();

  public static void main(String[] args)
  {
      // 'list' array list contains animals
      List<String> list = new ArrayList<String>();
      list.add("Tiger");
      list.add("Crocodile");
      list.add("Cat");
      list.add("Dog");
      list.add("Elephant");
      list.add("Lion");
      list.add("Deer");
      list.add("Eagle");
      list.add("Monster");
      list.add("Alien");
      list.add("Vombie");
      list.add("Politician");
      list.add("Donkeye");

      List<String> teamA = new ArrayList<String>();
      List<String> teamB = new ArrayList<String>();
      String newAnimal;

      int totalAnimalsForTeams = 7; // <- probably get this value from the user?

      if (totalAnimalsForTeams > list.size())
      {
          System.out.println("There are only " + list.size() + " animals in the list. Requested animals was: " + totalAnimalsForTeams);
          return;
      }

      int firstHalf = totalAnimalsForTeams / 2; 

      if (firstHalf < 1)
      {
          System.out.println("Requested " + totalAnimalsForTeams + " animals for teams... not enough to make two teams!");
          return;
      }

      for(int i = 0; i < firstHalf; i++)
      {
        newAnimal = getRandomList(list);
        teamA.add(newAnimal);
        list.remove(newAnimal);
      }

      int secondHalf = totalAnimalsForTeams - firstHalf;

      for(int i = 0; i < secondHalf; i++)
      {
        newAnimal = getRandomList(list);
        teamB.add(newAnimal);
        list.remove(newAnimal);
      }
      System.out.println(teamA); 
      System.out.println(teamB);             
  }

  public static String getRandomList(List<String> list) {

      //0-4
      if (list.size() > 1)
      {
          int index = random.nextInt(list.size());
          //System.out.println("\nIndex :" + index ); 
          return list.get(index);
      }
      else
      {
          return list.get(0);
      }

  } 
}