Java If语句

3
我已经用Java编写了一些代码来测试两个解决方案的适应性。
然后,我想比较这两个解决方案,并保留适应性更好的一个,舍弃另一个。
例如:
if(fitness1 < fitness2)
    keep fitness1 and discard/ignore fitness2
else
    keep fitness2 and discard/ignore fitness1

我该如何实现这个目标?最终,我希望有一个包含n个最佳适应度的列表。我想我需要将每次迭代中的最佳适应度添加到某种类型的列表中?


你能具体点吗?fitness是什么类型的变量(int、double等)? - Rafe Kettler
fitness1fitness2都是双精度变量。discard只是表示“忽略” - 我只想跟踪最佳适应度水平。 - Mus
4
这似乎是一个非常基础的Java问题。你是否阅读过有关基础Java语法的教程,特别是有关声明和赋值变量的部分? - MAK
1
更大或更小的数字哪个更好?您当前的比较似乎暗示着较低的适应度分数比较高的分数更好(当然,这可能是真的)。 - eldarerathis
1
fitness1fitness2是什么类型的数据?“丢弃”是什么意思?Java具有自动垃圾回收功能,因此您无需执行任何操作即可丢弃对象;只需不保留对它的引用即可。 - Ted Hopp
@eldareathis 是的,健康分数越低越好,因为这是一个最小化问题。理想情况下,健康分数为0是完美的,但这从未真正实现。 - Mus
5个回答

6
best = (fitness1 < fitness2) ? fitness1 : fitness2;

?: 三元运算符在这种决策过程中可能会很有用。


2
这是一种复杂且难以扩展的重新发明“min”的方式。 - user395760
希望我能点个赞+2,Java 中见不到足够的三元运算符 :D - Jesus Ramos
似乎这是一种华丽的写法:best = Math.min(fitness1, fitness2); - Ted Hopp
我有C/C++的背景,而Java中的?:是专门为像我这样的人准备的。我喜欢它,也习惯了它。当然,两种方法都可以。 - Maciej Ziarko

3
我建议创建一个ArrayList<Double>来保存最佳值,并使用以下代码:
arrayList.add((fitness1 < fitness2) ? fitness1 : fitness2);

这样你将会得到一个最佳价值清单。

虽然我在示例输出中没有看到任何重复的结果,但您能展示一下您用来遍历可能的适应度值的算法吗? - tvkanters

1
如果你的最终目标是获得“前n个健身水平”的列表,那么你可能已经有了一个列表,对吧?
如果是这样的话,只需利用List的功能即可:
// takes a list of Doubles, returns 'top' levels
public List<Double> getTopN(List<Double> allLevels, int top) {
    List<Double> sorted = new ArrayList<Double>(allLevels); // defensive copy
    Collections.sort(sorted, new Comparator<Double>() {
        @Override
        public int compare(Double left, Double right) {
            return left.compareTo(right); // assumes no null entries
        }
    });

    return sorted.subList(0, Math.min(sorted.size(), top));
}

0

引入另一个变量。

类型 bestFitness

if(fitness1 < fitness2){
   bestFitness = fitness1;
}else{
   bestFitness = fitness2;
}

然后丢弃 fitness1fitness2 两个变量

或者使用 Math.min


0
假设适应度是一个整数。
int fitness1 = 5;
int fitness2 = 10;

int bestFit = bestFit(fitness1, fitness2);

//nothing needs to be done to explicitly discard fitness2.  Just keep using bestFit
//and let the GC worry about discarding stuff for you

public static int bestFit(int f1, int f2) { 

   return f1 > f2 ? f1 : f2

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接