【发布时间】:2017-03-27 14:11:16
【问题描述】:
我正在阅读 Java Shildt The Complete 参考,我想知道有一段代码看起来很简单,但我不明白它是如何工作的。
// A generic interface example.
// A Min/Max interface.
interface MinMax<T extends Comparable<T>> {
T min();
T max();
}
// Now, implement MinMax
class MyClass<T extends Comparable<T>> implements MinMax<T> {
T[] vals;
MyClass(T[] o) {
vals = o;
}
// Return the minimum value in vals.
public T min() {
T v = vals[0];
for (int i = 1; i < vals.length; i++)
if (vals[i].compareTo(v) < 0) v = vals[i];
return v;
}
// Return the maximum value in vals.
public T max() {
T v = vals[0];
for (int i = 1; i < vals.length; i++)
if (vals[i].compareTo(v) > 0) v = vals[i];
return v;
}
}
class GenIFDemo {
public static void main(String args[]) {
Integer inums[] = {3, 6, 2, 8, 6};
Character chs[] = {'b', 'r', 'p', 'w'};
MyClass<Integer> iob = new MyClass<Integer>(inums);
MyClass<Character> cob = new MyClass<Character>(chs);
System.out.println("Max value in inums: " + iob.max());
System.out.println("Min value in inums: " + iob.min());
System.out.println("Max value in chs: " + cob.max());
System.out.println("Min value in chs: " + cob.min());
}
}
//The output is shown here:
//Max value in inums: 8
//Min value in inums: 2
//Max value in chs: w
//Min value in chs: b
我无法理解这个及其输出:
// Return the maximum value in vals.
public T max() {
T v = vals[0];
for (int i = 1; i < vals.length; i++)
if (vals[i].compareTo(v) > 0) v = vals[i];
return v;
}
为什么输出是8,如果根据条件, vals[1].compareTo(vals[0])(6>3) > 0 已经为真,
所以 v = 6,而不是 8。
我不明白它如何在这里找到最大值和最小值..
你能解释一下吗?谢谢!
【问题讨论】:
-
因为那里有一个循环。它不会在一次成功后停止 - 它会替换
val,并检查vals中包含的每个项目。 -
是的,但是..它可以找到一个使条件为真的项目的工作条件,它不能是最大值
-
在此算法中,
v始终是“迄今为止的最大值”。对于你的情况。在遇到 8 之前,它将是 6。发生这种情况时,v变为 8 并且之后不会更改,因为没有其他项目可以满足v.compareTo(vals[i]) > 0检查。 -
非常感谢,现在我明白了。问题是我认为'v'总是等于'vals [0]'
标签: java if-statement for-loop