出于某种原因,我在代码的第一个方法中遇到了问题,ans。如果你看看do while和while循环,while循环工作正常,运行LinkedHashSet中的每个元素,虽然do-while在while已经第一次运行之后停止。因此num1不会移动通过12,而num2成功地成为Set中的每个值,我不知道为什么。我通过打印num1和num2来解决这个问题,我无法弄清楚为什么会这样。任何和所有的帮助表示赞赏。这是我的代码:
import java.util.Set;
import java.util.LinkedHashSet;
import java.util.Iterator;
public class main{
public static int ans(Set<Integer> abund,int total){
int sum;
Object num1;
Object num2;
Iterator itr=abund.iterator();//creates iterator to get values from set
do{//loop to get all values from set
num1=itr.next();//assigns each object in set to a num
while (itr.hasNext()){//loop to get all values from set to add
num2=itr.next();//assigns each object in set to a num
sum=((int) num1+(int) num2);
total-=sum;
}
}while (itr.hasNext());
return total;
}
public static boolean abun(int y){
int x;
int facsum=0;
for(x=1;x<y;x++){
if (y%x==0){
facsum+=x;
}
}
if (facsum>y){
return true;
}
else{
return false;
}
}
public static void main(String[] args){
int x;//for loop counter
int y;//another for loop counter
int total=0;//total of all numbers from 0-28123
int fin;//final answer
boolean abundant;
Set<Integer> abund=new LinkedHashSet<Integer>();
for (x=0;x<28124;x++){
abundant=abun(x);
if (abundant==true){
abund.add(x);
}
total+=x;
}
fin=ans(abund,total);
System.out.println("Final: "+fin);
}
}
由于
答案 0 :(得分:1)
您需要从丰富数字A的集合中构建所有对的总和,其中 i &lt; = a j 。您无法使用单个迭代器执行此嵌套循环,根据定义,该迭代器从第一个到最后一个。使用两个迭代器或foreach循环也有些困难,因为内循环必须跳到外循环所在的位置。因此...
使用List来保存此迭代的大量数字:
public static int ans(List<Integer> abund, int total){
for( int i = 0; i < abund.size(); ++i ){
for( int j = i; j < abund.size(); ++j ){
total -= abund.get(i) + abund.get(j);
}
}
return total;
}
Set<Integer> abund=new HashSet<Integer>(); // List-ArrayList
fin = ans( new ArrayList( abund ), total );
实际上,只使用List就足够了,因为无论如何数字都是不同的。
答案 1 :(得分:1)
Iterator是指向集合的指针。而你只分配一个。内循环完成后,代码将立即退出外循环。如果你需要在现场迭代两次。您将需要两个迭代器。 但我建议将set转换为数组(Integer [] ab = abund.toArray()。
使用进行循环。