我正在寻找一种表达这种伪代码的优雅方式。对于我的作业,我无法更改方法签名或参数类型。
private static int smallest(int... nums)
{
return Arrays.stream(nums).min().getAsInt();
}
我尝试做的就是从方法调用中获取一个巨大的整数列表作为参数,并返回所有< int strong> int 参数。我已经尝试谷歌并阅读API以了解如何正确实现这一点,但我只是到目前为止。有人可以帮我在语法上纠正这个来正确编译和输出吗?
我无法正确发布格式化控制台错误,因此我将其作为我的OP的更新发布。回答@Marvin我在我的编译器中遇到这个错误...
Methods1.java:25: error: cannot find symbol
int small = Arrays.stream(nums).min().getAsInt();
^
symbol: variable Arrays
location: class Methods1
1 error
答案 0 :(得分:4)
你几乎拥有它,它是getAsInt()
而不是get()
:
private static int smallest(int... nums) {
return Arrays.stream(nums).min().getAsInt();
}
完成working sample on ideone.com:
import java.util.Arrays;
class Ideone {
public static void main (String[] args) {
int[] nums = new int[] { 7, -2, 5, 12 };
System.out.println(smallest(nums));
}
private static int smallest(int... nums) {
return Arrays.stream(nums).min().getAsInt();
}
}
打印:
-2
答案 1 :(得分:1)
您可以像这样迭代整个数组
private static int smallest(int[] array)
{
//check if the array is empty
if(array.length == 0)
{
//handle, whatever happens if the array is empty
return -1; //maybe you should throw an exception here
}
//storing the smallest found value, start with the first int in the array
int smallest = array[0];
//the iteration
for(int i : array)
{
//check if the current checked value is smaller than the smallest found...
if(i < smallest)
{
//...and if it is, set it as the smallest found value
smallest = i;
}
}
//finally, return the smallest value
return smallest;
}
这应解决您当前的问题,但在大多数情况下,我建议使用预先排序的数组或列表。如果其中的数据已按升序存储,则第一个元素始终为最低元素,最后一个元素始终为最高值。
答案 2 :(得分:0)
此方法使用 varargs 作为参数,获取无限未知的可变参数数量。将从main调用的所有参数组合到一个相同类型的数组中。这是为了解释main中原始方法调用的可变性。最后,返回所有参数的最小整数。
我是一个相当新的程序员,第二年进入计算机科学,我不确定这对任何人都有用,但我希望它有所帮助。感谢大家在这里提供您的精彩提示和错误捕获。我的问题是我忘了导入我的Array类,并且我的一个来自stream类的方法调用被错误命名。
最后,对于任何经验丰富的程序员来说,除了这个看起来活泼优雅之外,这句话的执行速度是否比执行一个简单的foreach循环并将num与最后一个最小的那个相比更快?
import java.util.Arrays;
public class Test
{
public static void main(String[] args)
{
// Enter as many as you want here, can be more or less than three
int num1 = 23;
int num2 = 89;
int num3 = 9;
// Apply each variable as an argument for the method call
int smallestNumber = smallest(num1, num2, num3);
// Print out variable value to prove it works
System.out.print(smallestNumber);
}
private static Integer smallest(int... nums)
{
// Found an elegant way to do the stubbed out block of code
// I left the code down there to show what is going on here
try
{
return Arrays.stream(nums).min().getAsInt();
}
catch (Exception e)
{
return null;
}
// The above code is essentially doing the below code
/*try
{
// Initialize Variable to start of array
int smallest = nums[0];
// For:Each Loop: go through each parameter and assign it a local variable to compare with
for(int i : nums)
{
// compare if smaller
if(i < smallest)
{
// If true, set as smallest
smallest = i;
}
}
return smallest;
}
catch (Exception e)
{
return null;
}*/
}
}