在Java中,我正在研究一个函数以返回数组中的最大值。我正在编写它,以便它不在乎使用有界参数的参数类型(我认为)。在检测功能签名时,主功能出现错误。
我遵循了在各个教程页面中看到的内容,似乎并没有表明该呼叫会出现任何问题。
public static <N extends Number> N getMax (N [] numberArray){
N value = numberArray [0];
for (int i = 0; i < numberArray.length; i++){
if((double) numberArray[i] > (double) value)
value = numberArray[i];
}
return value;
}
public static void main (String [] args ){
double[] array = {1,2,3,1,-10,2};
System.out.println(getMax(array));
}
编辑:对该问题进行了一些澄清。我这样做是作为分配的一部分,在该分配中,我需要编写一个返回数组最大值的函数。基于此,我假设我不能指望任何特定的输入,并且主要功能只是演示该问题。
答案 0 :(得分:1)
您已指定一个原始数组(double[]
),将其传递给Number[]
时不能将其推断为getMax
。一种简单的解决方案是改用Double[]
,因为Double
扩展了Number
:
public static void main (String[] args) {
Double[] array = {1D, 2D, 3D, 1D, -10D, 2D};
System.out.println(getMax(array));
}
输出:
3.0
答案 1 :(得分:0)
您可以使用convert an array of primitives to an array of containers类的方法轻松地ArrayUtils
,该类位于单独的但通用的库中。这将使您可以轻松地将任何原始数字类型(<!DOCTYPE html>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
<head>
<meta charset='UTF-8' /><meta name='viewport' content='width=device-width, height=device-height, initial-scale:1' />
<title>Test Template</title>
<link type='text/css' rel='stylesheet' href='css/external.css' />
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
<script type='text/javascript' src='js/external.js'></script>
</head>
<body>
<div id='content'>
<input id='check_all' type='checkbox' checked='checked' /><label for='check_all'>All</label>
<input class='indi' id='check_one' type='checkbox' checked='checked' /><label for='check_one'>One</label>
<input class='indi' id='check_two' type='checkbox' checked='checked' /><label for='check_two'>Two</label>
<input class='indi' id='check_three' type='checkbox' checked='checked' /><label for='check_three'>Three</label>
<table id='output_table'>
<tbody>
<tr>
<th>1</th><td>one</td>
</tr>
<tr>
<th>2</th><td>two</td>
</tr>
<tr>
<th>3</th><td>three</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
,int
等)的数组传递给您的方法。
float
在我们使用它的同时,public static void main (String [] args ){
double[] array = {1,2,3,1,-10,2};
System.out.println(getMax(ArrayUtils.toObject(array)));
}
有一个方法Number
,它将方法强制转换隐藏在其具体实现中:
doubleValue()