我正在解决关于素数的问题,我找到了使用数组的解决方案,但是我想使用数组列表来解决一些问题,其中一个是很好地理解Arraylist。但是当我使用arraylist时,我发现结果不一样,这里有2个代码:
//使用数组
import java.util.Arrays;
public class Prime {
public static void main(String[] args) {
primeNumber(100);
}
public static void primeNumber(int end) {
boolean primeNumbers[] = new boolean[end];
for (int i = 0; i < end; i++) {
primeNumbers[i] = true;
}
for (int i = 2; i < primeNumbers.length; i++) {
if (primeNumbers[i] ) {
for (int j = i+i; j < primeNumbers.length; j += i) {
primeNumbers[j]= false;
}
}
}
for (int j = 2; j < primeNumbers.length; j++) {
if (primeNumbers[j]) {
System.out.println(j);
}
}
}
}
//使用ArrayList
import java.util.ArrayList;
public class Prime {
public static void main(String[] args) {
primeNumber(100);
}
public static void primeNumber(int end) {
ArrayList<Boolean> primeNumbers = new ArrayList<Boolean>();
for (int i = 0; i < end; i++) {
primeNumbers.add(i,true);
}
for (int i = 2; i < primeNumbers.size(); i++) {
if (primeNumbers.get(i) ) {
for (int j = i+i; j < primeNumbers.size(); j += i) {
primeNumbers.add(j, false);
}
}
}
for (int j = 2; j < primeNumbers.size(); j++) {
if (primeNumbers.get(j)) {
System.out.println(j);
}
}
}
}
我可以知道使用Arraylist时做了什么错误,如果我想使用arraylist获得相同的结果我应该怎么做。
非常感谢您的帮助。
答案 0 :(得分:7)
而不是
primeNumbers.add(j, false);
你应该使用
primeNumbers.set(j, false);
因为add()
在指定位置添加了一个新元素(意味着ArrayList增长了一个元素),但set()
仅在指定位置设置元素的值。
答案 1 :(得分:4)
primeNumbers.add(j, false);
将元素添加到数组列表中,并将索引&gt; = j
的所有元素向右移动[包括前一个元素j
],同时:< / p>
primeNumbers[j]= false
会覆盖现有元素 j
,并且不会移动元素。
您可能正在寻找ArrayList.set()
而不是ArrayList.add()
答案 2 :(得分:0)
数组与 ArrayList 的区别如下: