当前位置: 首页 > 知识库问答 >
问题:

我如何简化/结合这两种方法?

贲永思
2023-03-14

我写了两个方法来查找数组中最小和最大的int,但它们几乎完全相同,所以我觉得应该有一些方法来简化这一点,也许是一种方法?

private int findMin(){
    int min = arr[0];
    for(int num : arr){
        if(num<min) {
            min = num;
        }
    }
    return min;
}

private int findMax(){
    int max = arr[0];
    for(int num : arr){
        if(num>max){
            max = num;
        }
    }
    return max;
}

我不知道如何处理此类问题,所以我很想看到您的回复!

编辑:虽然这个关于如何将算术运算符传递给一个方法的问题和这个关于如何获得Java 8流的最小值和最大值的问题回答了文字编程问题,但我的问题是关于如何处理方法做类似事情的问题,以及一般比较数组的方法。这篇帖子的答案比那些问题的答案对我的帮助更大。(谢谢,伙计们!)

共有3个答案

赵俊晤
2023-03-14

如果int的数量很大,并且大多数时候都需要最小值和最大值,那么只浏览一次列表并同时计算最小值和max值可能是有意义的。

然后就是当一个函数只能有一个返回值时,如何传递两个数字的问题。所以我们为此创建了一个特殊的结果类。

class MinMaxResult {
    public int min = 0;
    public int max = 0;
}

MinMaxResult findMinMax() {
    MinMaxResult result = new MinMaxResult();
    result.min = arr[0];
    result.max = arr[0];

    for (int num: arr) {
        if (num < result.min) {
            result.min = num;
        } else if (num > result.max) {
            result.max = num;
        }
    }

    return result;
}
郎宏浚
2023-03-14

您的方法已经在IntStream中可用,它还处理空数组(不确定的极端)。

private OptionalInt findMin() {
    return IntStream.of(arr).min();
}

private OptionalInt findMax() {
    return IntStream.of(arr).max();
}

就像你选择抛出异常一样:

private int findMin() {
    return IntStream.of(arr).min().get();
}

private int findMax() {
    return IntStream.of(arr).max().get();
}

或作为方法参考:

Function<IntStream, OptionalInt> extreme = IntStream::max;

还要考虑并行功能:

IntStream.of(arr).parallel().min();

@Yay295提醒我们<code>IntSummaryStatistics</code>:

IntSummaryStatistics stat = new IntSummaryStatistics();
IntStream.of(arr).stream()
    .forEach(stats); // stats is an int consumer too.

或者做得更多的时候

IntSummaryStatistics stats = IntStream.of(arr)
    .collect(Collectors.summarizingInt(IntSummaryStatistics::new,
                    IntSummaryStatistics::accept, 
                    IntSummaryStatistics::combine);

然后可以问几个数字:

int min = stats.getMin();
int max = stats.getMax();
int avg = stats.getAverage();
int sum = stats.getSum();
巫马泓
2023-03-14

您可以只实现一个,比如<code>findMax</code>,然后将一个<code>Comparator</code>传递给它,它指示应该如何进行比较:

private int findMax(Comparator<Integer> comparator) {
    int max = arr[0];
    for (int num : arr) {
        if (comparator.compare(num, max) > 0) {
            max = num;
        }
    }
    return max;
}

传递Comparator.natural顺序()用于整数的自然排序,因此您可以获得最大值。

传递< code > comparator . reverse order()进行反向排序,这样可以得到最小值。

 类似资料:
  • 我想尝试将以下两种方法合二为一: 第一个方法构造一个映射,其中键是<code>String</code>,值是<code<ArrayList</code>。 我想尝试添加第二条信息,即简单的错误消息(方法2)。HashMap不够复杂,无法保存这些信息,但我喜欢它只接受唯一值的方式,而且很容易迭代和传递。 任何建议非常感谢:)

  • 我已经编写了两种方法来查找数组中最小和最大的 int,但它们几乎相同,所以我觉得应该有一些方法来简化它,也许作为一种方法? 我不知道如何处理这类问题,所以我很想看看你的回应! 虽然这个关于如何将算术运算符传递给方法的问题和这个关于如何获得Java 8流的最小值和最大值的问题回答了字面上的编程问题,但我的问题是关于如何处理做类似事情的方法的问题,以及一般比较数组的方法。这篇文章的答案比那些问题的答案

  • 我想重构这两个方法,除了“maxResult ()”之外,它们实际上是相同的,这两个方法指的是两个不同的 get,一个返回我单个用户,另一个返回列表。我如何简化这两种方法(总是如果有意义的话)这是两种方法: 第一种方法: 第二种方法:

  • 问题内容: 这是在我正在使用的名为Mirth的应用程序中,但它似乎来自Apache Commons库内部,该方法来自于检查某种东西是否确实是Base64编码的方法。所有文档都说唯一的回报是对还是错,那么我如何得到-61? 问题答案: 可能是。该假想是指数。 从http://kickjava.com/src/org/apache/commons/codec/binary/Base64.java.ht

  • 我有一个字符串数组列表,希望将所有可能的组合存储到另一个集合中。 例如: 重复并不重要。我现在拥有的代码是: 我正在尝试让它递归调用自己,以便它可以存储组合。我可以得到任何关于代码中缺少的位置或哪个部分的帮助吗?

  • 问题内容: 在Java中,我可以通过以下方式初始化具有预定义内容的数组: 或通过: 本质上,这两种方式之间有什么区别吗?它们在Java中是否完全相同?哪种方法更好,为什么呢? 问题答案: 就您而言,没有区别。 当您不将变量分配给变量并进行内联创建时,将会有所 不同。 例如,考虑有一个方法,它以数组作为参数。 您的情况: 现在在其他情况下调用它时可以看到区别。