我正在努力修复java中的循环,如果有人能够帮助我,我真的很感激。
整个代码:http://pastebin.com/C5SQghFa
循环问题:
for(int i = 0 ; i < length ; i++){
for(int j = 1 ; j < length ; j++){
if(defaultSet.get(i) + defaultSet.get(j) == sum){
System.out.println("YUP\n" + defaultSet.get(i) + " " + defaultSet.get(j));
finalSet.add(defaultSet.get(j));
}else if(defaultSet.get(i) == sum && !finalSet.contains(defaultSet.get(i))){
finalSet.add(defaultSet.get(i));
}else{
System.out.println("NOPE\n" + defaultSet.get(i) + " " + defaultSet.get(j));
}
}
}
我正在尝试两次运行ArrayList,因此我可以比较总和是否等于用户输入的TARGET VALUE。
第一个if语句simple比较两个值,然后添加值(如果有效)。第二个语句查看目标值是否在列表中,如果是,则会自动添加。
如果输出值不等于TARGET VALUE,则第三个语句将忽略输出值。
我的问题是循环无法正常工作。对于某些输入他们很好,但例如:
ARRAYLIST:8,5,5,2
目标价值:10
输出:5,5,5,5
这是不正确的。输出应为:8,5,5,2!我的循环正在跳过第一次和最后一次比较,并添加了我不想要的额外值。任何人都可以解释如何正确设置这些循环吗?
答案 0 :(得分:0)
问题在于:
int endLength = length--;
你应该排除i和j相同的比较。
您正在更改长度var。
的值您的实现具有O(n ^ n)复杂性,有更有效的方法来实现该功能。
答案 1 :(得分:0)
如果你真的想要那个输出,你应该改变2行。
E.g:
for (int j = 0; j < length; j++) {
if (defaultSet.get(i) + defaultSet.get(j) == sum && j != i) {
输出(finalSet
的内容):
8, 5, 5, 2
请注意:
j
从0
开始考虑所有值j
应与i
=&gt;不同否则你会得到8, 5, 5, 5, 5, 2
这是一个适用于特定示例的示例。
如果您想要更精确的话,还应该提供规则。
以下输入8, 5, 5, 5, 2
和10
的预期输出可能很有用。是8, 5, 5, 2
还是8, 5, 5, 5, 5, 5, 5, 2
还是其他什么?
8, 5, 2
怎么样?是8, 5, 2
还是8, 5, 5, 2
还是其他什么?
根据你的规则,你也可以(如果它是总和的一半,它会打印两次元素):
boolean ok = true;
for (int a : defaultSet) {
for (int b : defaultSet) {
if (a + b == sum) {
if (a == b) {
if (ok) {
finalSet.add(a);
finalSet.add(b);
ok = false;
}
} else {
finalSet.add(a);
}
} else if (a == sum && !finalSet.contains(a)) {
finalSet.add(a);
}
}
}