Java 嵌套类

Java Nested Class

提问人:Aahlad Kethineedi 提问时间:8/23/2021 最后编辑:Andy TurnerAahlad Kethineedi 更新时间:8/23/2021 访问量:355

问:

谁能解释静态 Pair get Min Max 方法?为什么我们在 get Min Max 方法前面使用 Inner 类名 Pair?我无法找到有关此内容的信息。谁能解释一下?我是java的新手。 法典:

public class Geeks {

    static class Pair {
 
        int min;
        int max;
    }
 
    static Pair getMinMax(int arr[], int low, int high) {
        Pair minmax = new Pair();
        Pair mml = new Pair();
        Pair mmr = new Pair();
        int mid;
 
        // If there is only one element
        if (low == high) {
            minmax.max = arr[low];
            minmax.min = arr[low];
            return minmax;
        }
 
        /* If there are two elements */
        if (high == low + 1) {
            if (arr[low] > arr[high]) {
                minmax.max = arr[low];
                minmax.min = arr[high];
            } else {
                minmax.max = arr[high];
                minmax.min = arr[low];
            }
            return minmax;
        }
 
        /* If there are more than 2 elements */
        mid = (low + high) / 2;
        mml = getMinMax(arr, low, mid);
        mmr = getMinMax(arr, mid + 1, high);
 
        /* compare minimums of two parts*/
        if (mml.min < mmr.min) {
            minmax.min = mml.min;
        } else {
            minmax.min = mmr.min;
        }
 
        /* compare maximums of two parts*/
        if (mml.max > mmr.max) {
            minmax.max = mml.max;
        } else {
            minmax.max = mmr.max;
        }
 
        return minmax;
    }
 
    /* Driver program to test above function */
    public static void main(String args[]) {
        int arr[] = {1000, 11, 445, 1, 330, 3000};
        int arr_size = 6;
        Pair minmax = getMinMax(arr, 0, arr_size - 1);
        System.out.printf("\nMinimum element is %d", minmax.min);
        System.out.printf("\nMaximum element is %d", minmax.max);
 
    }
}
爪哇岛

评论

0赞 Andy Turner 8/23/2021
“Why are we are using Inner class name Pair in the front of the get Min Max method”是返回类型,与返回 or 时没有什么不同。PairintString
0赞 Matteo NNZ 8/23/2021
有一种称为 Pair 的对象类型,它有一个最小值和一个最大值。然后你有一个静态方法(这意味着即使你没有父类的实例也可以调用它),它从中获取一些输入,这将创建一个包含这两个信息(输入的最小值和最大值)的 Pair
0赞 Andy Turner 8/23/2021
“内部类”不是内部类,而是一个嵌套类。内部类必然是非静态的。Pair
1赞 luk2302 8/23/2021
它试图执行二进制搜索/分而治之,这在这里没有任何意义,因为输入是无序的,无论如何你都会检查一次元素,常规循环将在同一时间产生完全相同的输出,甚至可能更快,因为它不做不必要的分配和递归

答:

0赞 m.mashaly 8/23/2021 #1

之所以使用,是因为该函数应该返回数组中的最小元素和数组中的最大元素,
因此编写此代码段的人决定创建 Pair 类,以便更直观地将其作为具有 min 和 max 属性的对象返回,而不是返回长度为 2 的数组(这也是有效的)。
Pair minmax = new Pair()

0赞 DarthBenro008 8/23/2021 #2

我总是建议遵循语法。在 Java 中,编写函数的语法是:

<access modifier> <return type> <functionName>(parameter_type parameter_name){
   // function body
}

enter image description here

在您共享的代码片段中:

  • 访问修饰符:static
  • 返回类型:
  • 函数名称:getMinMax
  • 参数:int arr[]、int low 和 int high

因此,该函数返回一个 Pair 类型,而不是一个具有 2 个值的数组。它用答案预先填充 Pair 的 min 和 max 字段。

1赞 2 revsAndy Turner #3

不是回答这个问题,而是@luk2302的观点:这种方法真的太复杂了,用循环可以更容易地编写:

static Pair getMinMax(int arr[]) {
  Pair result = new Pair();
  result.min = Integer.MAX_VALUE;
  result.max = Integer.MIN_VALUE;

  for (int a : arr) {
    result.min = Math.min(result.min, a);
    result.max = Math.max(result.max, a);
  }

  return result;
}

评论

0赞 Andy Turner 8/23/2021
@luk2302删除了低/高。如果你不递归,就不需要这些。