int playerOne = 4;
int playerTwo = 8;
int playerThree = 2;
int playerFour = 8;
public static int max(int p1, int p2, int p3, int p4) {
if(p1 > p2 && p1 > p3 && p1 > p4){
return p1;
} else if (p2 > p1 && p2 > p3 && p2 > p4) {
return p2;
} else if ...
}
我想知道这是一种更好的方法来重现上面的功能,重复性较低。
感谢。
答案 0 :(得分:6)
public static int max(int[] integers) {
int max = Integer.MIN_VALUE;
for (int e : integers) max = Math.max(max, e);
return max;
}
现在可以返回有关变量名称的信息的实现:
//Returns the array index of the maximum integer
public static int max(int[] integers) {
int max = Integer.MIN_VALUE;
int retVal = -1;
if (integers == null) return retVal; //needs to handle this case too
for (int i = 0; i < integers.length; i++) {
max = Math.max(max, integers[i]);
if (integers[i] == max) retVal = i;
}
return retVal;
}
这些实现还具有能够处理任何大小的数组的优势,而不仅仅是4。
答案 1 :(得分:2)
使用Java 8,这将是:
private int max(int... ints) {
if (ints.length == 0) {
throw new IllegalArgumentException();
}
return Arrays.stream(ints).max().getAsInt();
}
步骤说明:
ints.length > 0
。IntStream
。max()
上的IntStream
获取最大价值。int
并将其从[{1}}返回的OptionalInt
中退回。我希望它有助于将来参考。
答案 2 :(得分:1)
public static int max(int[] integers) {
int max = integers[0];
for (int i = 1; i < integers.length; i++)
max = Math.max(max, integers[i]);
return max;
}
答案 3 :(得分:1)
如果使用包装类Integer
,则可以执行以下操作:
public static int max(Integer... values){
return Collections.max(Arrays.asList(values));
}
答案 4 :(得分:0)
只是为了它的乐趣,我给了一个递归的方式,它没有比其他选项更好,但它很有趣; - )
public static int get_max(int[] integers) {
switch (integers.length) {
case 0:
throw new IllegalArgumentException();
case 1:
return integers[0];
case 2:
return Math.max(integers[0],integers[1]);
default:
return Math.max(integers[0], get_max(Arrays.copyOfRange(integers, 1, integers.length-1));
}
}
afaict它应该工作,但它根本不是内存效率,因为它在每次递归时复制数组(少一个值),并为每次递归的每个函数调用占用内存。
<3