gpt4 book ai didi

java - Java中传入一个运算符

转载 作者:行者123 更新时间:2023-12-02 12:01:24 24 4
gpt4 key购买 nike

我想通过传入运算符来减少代码,但我不知道如何做到这一点。例如,在下面的两个函数中,除了小于号和大于号之外,它们都具有相同的代码

private int findMin(int[] a){
int min =a[0];
for (int val : a){
if (val<min){
min=val;
}
}
}

private int findMax(int[] a){
int max =a[0];
for (int val : a){
if (val>max){
min=val;
}
}
}

我正在考虑减少代码的一种解决方案是使用声明的方法execute(int a, int b)创建一个名为可执行的接口(interface),该方法返回一个 boolean 值。然后我可以创建两个实现,一个执行 <,一个执行 >。像这样的东西:

private int find(int[] a, Executable myOp){
int cur =a[0];
for (int val : a){
if (myOp.execute(val,cur)){
cur=val;
}
}
}
private int findMax(int[] a){
GreaterThan g = new GreaterThan();
find(a, g)
}
private int findMin(int[] a){
LessThan g = new LessThan();
find(a, g)
}

*其中 GreaterThan 和 LessThan 实现可执行文件

我认识到这对于我的示例来说是完全没有必要的,但我可以看到更复杂的示例,在这些示例中,通过更改单个“操作”来创建额外的功能将是有益的。我所描述的是解决我的困境的标准方法还是我应该考虑其他事情?

最佳答案

Java 已经提供了一种机制,您可以使用 Comparator 来执行此操作。 。我将这些方法设为静态,因为它们不依赖于任何类数据,并且我添加了一个小型测试工具。它可能看起来像,

private static int find(int[] a, Comparator<Integer> myOp) {
int cur = a[0];
for (int val : a) {
if (myOp.compare(val, cur) > 0) {
cur = val;
}
}
return cur;
}

private static int findMax(int[] a) {
return find(a, Comparator.naturalOrder());
}

private static int findMin(int[] a) {
return find(a, Comparator.reverseOrder());
}

public static void main(String[] args) {
int[] vals = { 1, 2, 3 };

System.out.println(Arrays.toString(vals));
System.out.println("min: " + findMin(vals));
System.out.println("max: " + findMax(vals));
}

我明白了

[1, 2, 3]
min: 1
max: 3

关于java - Java中传入一个运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47233815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com