Java ArrayList#size()的奇数返回
我试图在Java ArrayList#size()的奇数返回,java,arraylist,random,Java,Arraylist,Random,我试图在HashMap中获得一个随机的ArrayList,当我查看HashMap中的所有ArrayList时,所有内容的大小都应该是2 当我尝试将Hashmap中的ArrayList添加到另一个列表时,就会出现问题。然后,即使HashMap中所有列表的大小都是2,它也会将大小返回为0。有人知道为什么吗 for(Point p : defensePossibilities.keySet()) System.out.println(defensePossibilities.get(p).si
HashMap
中获得一个随机的ArrayList
,当我查看HashMap
中的所有ArrayList时,所有内容的大小都应该是2
当我尝试将Hashmap
中的ArrayList
添加到另一个列表时,就会出现问题。然后,即使HashMap
中所有列表的大小都是2,它也会将大小返回为0。有人知道为什么吗
for(Point p : defensePossibilities.keySet())
System.out.println(defensePossibilities.get(p).size());
ArrayList<Point> points = new ArrayList<>();
while(points == null) {
try {
int random = rnd.nextInt(defensePossibilities.size());
points.addAll(
defensePossibilities.get(random));
} catch(Exception e) {}
}
System.out.println("PointsSize: " + points.size());
int piece2 = rnd.nextInt(points.size());
如果
HashMap
中的所有数组列表的大小都是2,为什么点的大小是0?用点替换点==null
。isEmpty()
points
变量不为null,因为在while循环之前为points
变量分配了一个arraylist。我假设您要做的是在poinst列表为空时进行检查。因此,做出建议的改变将解决你的问题
for(Point p : defensePossibilities.keySet())
System.out.println(defensePossibilities.get(p).size());
ArrayList<Point> points = new ArrayList<>();
while(points == null) { // points is not null, it is just empty
// replace points == null with points.isEmpty()
try {
int random = rnd.nextInt(defensePossibilities.size());
points.addAll(
defensePossibilities.get(random));
} catch(Exception e) {}
}
System.out.println("PointsSize: " + points.size());
int piece2 = rnd.nextInt(points.size());
for(p点:0.keySet())
System.out.println(get.get(p.size());
ArrayList points=新的ArrayList();
虽然(points==null){//points不是null,它只是空的
//用points.isEmpty()替换points==null
试一试{
int random=rnd.nextInt(index.size());
加点(
防御可能性。获取(随机));
}捕获(例外e){}
}
System.out.println(“PointsSize:+points.size());
int piece2=rnd.nextInt(points.size());
将点==null
替换为点。isEmpty()
points
变量不为null,因为在while循环之前为points
变量分配了一个arraylist。我假设您要做的是在poinst列表为空时进行检查。因此,做出建议的改变将解决你的问题
for(Point p : defensePossibilities.keySet())
System.out.println(defensePossibilities.get(p).size());
ArrayList<Point> points = new ArrayList<>();
while(points == null) { // points is not null, it is just empty
// replace points == null with points.isEmpty()
try {
int random = rnd.nextInt(defensePossibilities.size());
points.addAll(
defensePossibilities.get(random));
} catch(Exception e) {}
}
System.out.println("PointsSize: " + points.size());
int piece2 = rnd.nextInt(points.size());
for(p点:0.keySet())
System.out.println(get.get(p.size());
ArrayList points=新的ArrayList();
虽然(points==null){//points不是null,它只是空的
//用points.isEmpty()替换points==null
试一试{
int random=rnd.nextInt(index.size());
加点(
防御可能性。获取(随机));
}捕获(例外e){}
}
System.out.println(“PointsSize:+points.size());
int piece2=rnd.nextInt(points.size());
points not为空,因为您已实例化它。
arraylistpoints代码>这是空的
因此,请替换您的代码
for(Point p : defensePossibilities.keySet())
System.out.println(defensePossibilities.get(p).size());
ArrayList<Point> points = new ArrayList<>();
while(points.isEmpty()) {
try {
int random = rnd.nextInt(defensePossibilities.size());
points.addAll(
defensePossibilities.get(random));
} catch(Exception e) {}
}
System.out.println("PointsSize: " + points.size());
int piece2 = rnd.nextInt(points.size());
2次更新
public V get(对象键)返回指定键所指向的值
已映射,如果此映射不包含密钥的映射,则为null
所以
ArrayList<Point> a = new ArrayList<>();
a.addAll(defensePossibilities.keySet());
int random = rnd.nextInt(defensePossibilities.size());
points.add(a.get(random))
ArrayList a=新的ArrayList();
a、 addAll(keySet());
int random=rnd.nextInt(index.size());
加分(a.get(随机))
points not为空,因为您已实例化它。
arraylistpoints代码>这是空的
因此,请替换您的代码
for(Point p : defensePossibilities.keySet())
System.out.println(defensePossibilities.get(p).size());
ArrayList<Point> points = new ArrayList<>();
while(points.isEmpty()) {
try {
int random = rnd.nextInt(defensePossibilities.size());
points.addAll(
defensePossibilities.get(random));
} catch(Exception e) {}
}
System.out.println("PointsSize: " + points.size());
int piece2 = rnd.nextInt(points.size());
2次更新
public V get(对象键)返回指定键所指向的值
已映射,如果此映射不包含密钥的映射,则为null
所以
ArrayList<Point> a = new ArrayList<>();
a.addAll(defensePossibilities.keySet());
int random = rnd.nextInt(defensePossibilities.size());
points.add(a.get(random))
ArrayList a=新的ArrayList();
a、 addAll(keySet());
int random=rnd.nextInt(index.size());
加分(a.get(随机))
在使用isEmpty()而不是==null之后,实际问题是ArrayIndexOutOfBoundsException
在代码中,random的值可以与列表的大小一样大。假设里面有10个对象,随机数是10:
防御可能性。获取(随机);//10对象=索引0到9,但不是10
请记住,列表和数组一样,从0开始索引
} catch(Exception e) {
System.out.println(e.toString());
}
你会明白我的意思;o) 在使用isEmpty()而不是==null之后,实际问题是ArrayIndexOutOfBoundsException
在代码中,random的值可以与列表的大小一样大。假设里面有10个对象,随机数是10:
防御可能性。获取(随机);//10对象=索引0到9,但不是10
请记住,列表和数组一样,从0开始索引
} catch(Exception e) {
System.out.println(e.toString());
}
你会明白我的意思;o) while(points==null)
就是这样。雷瑟曼是对的。空ArrayList从不为null,但其长度仅为0。使用isEmpty()方法而不是==null。如果它不是真的,那么它如何通过它?@TheGamerPlayz它只通过一次它不是真的。一旦该语句的计算结果为false,它就会停止重复循环。您能告诉我们如何定义这些可能性吗?它是一个HashMap吗?while(points==null)
就是它。雷瑟曼是对的。空ArrayList从不为null,但其长度仅为0。使用isEmpty()方法而不是==null。如果它不是真的,那么它如何通过它?@TheGamerPlayz它只通过一次它不是真的。一旦该语句的计算结果为false,它就会停止重复循环。您能告诉我们如何定义这些可能性吗?这是一个HashMap吗?当我使用#isEmpty时,它会陷入一个永恒的循环中。如果有问题,你知道它是什么吗?我不知道,我必须查看你的全部代码才能找到问题。这里的代码是需要给出的所有内容。除了增加防御可能性之外,没有什么能改变这一点。当我使用时,它会陷入一个永恒的循环。如果有问题,你知道它是什么吗?我不知道,我必须查看你的全部代码才能找到问题。这里的代码是需要给出的所有内容。除了增加防御可能性之外,没有其他改变。我将其更改为#isEmpty,并且它已经在该循环中循环了850万个循环了…将points.addAll(防御可能性.get(随机))替换为points.addAll(防御可能性);我正在尝试从HashMap防御可能性的内部获取一个随机ArrayList,因此我认为这会在其自身中导致一个新的错误。好的,我现在看到了你的第二篇文章,但我并没有尝试添加所有的键或al