java - MinMax 返回机制。它如何处理这个 Shildt 的代码示例?

标签 java if-statement for-loop

我正在阅读 Java Shildt 完整引用,我想知道一段看起来非常简单的代码,但我无法理解它是如何工作的。

// 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。

我不明白它是如何在这里找到最大值和最小值的......

你能解释一下吗?谢谢!

最佳答案

仅针对 i=1 的迭代,vals[1].compareTo(vals[0]) 进行比较,在这种情况下 v= 6。考虑给定 for 循环的情况 i=3。这里 vals[3],即 8,与 v 的值(即 6,因为之前更新过)。由于8大于6,所以在本次迭代中将v的值更新为8。

关于java - MinMax 返回机制。它如何处理这个 Shildt 的代码示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43048767/

相关文章:

java - 如何在不修改 java.policy 文件的情况下向我的小程序授予打印权限

java - 在 Sqlite 中编写

java - Toggle 多维数组中的 boolean 值

java - 如何解决If语句使用3次的问题?

c:使用 scanf() 读取负数

java - android中保存对象数组列表的方法

java - Thymeleaf Security 不适用于 Spring Boot 1.3.5

python - 如何处理许多几乎相同的 if 语句?

java - 使用 for 循环用两个一维数组填充二维数组

c++ - 为什么我的循环范围不会改变元素?