我有一个动物的数组列表,点击“选择'按钮我 我想随机选择这些动物并将动物分成两部分 数组(拆分)称为' 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);
}
}
答案 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
,但您不会对此做任何事情。我知道这个方法应该返回一个随机选择的项目。
要正确执行您要求的操作,您必须声明新的
ArrayList
说temp
,然后将list
分配给它。为避免重复同一个对象,您需要从创建的
temp
ArrayList中删除随机生成的项目。- 醇>
完成后,删除创建的
temp
ArrayList。
我已根据我提出的建议对您的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);
}
}
}