我正在尝试解决我所修课程的练习。我需要创建一个函数,该函数创建输入数组并返回最小值和最大值。这是我的简单代码(非常基本):
static String createVect()
{
Scanner input = new Scanner(System.in);
System.out.print("Number of elements: ");
int n = input.nextInt();
int vector[] = new int[n];
for (int i = 0; i < n; i++)
{
System.out.print("Valor " + (i+1) + ": ");
vector[i] = input.nextInt();
}
int min = Arrays.stream(vector).min().getAsInt();
int max = Arrays.stream(vector).max().getAsInt();
System.out.println("Min: " + min);
System.out.println("Max: " + max);
return Arrays.toString(vector);
}
public static void main(String[] args)
{
System.out.println(createVect());
}
它工作正常,但是我想用Return替换System.out.print,但是我不确定是否应该封装它们或为min和max创建其他函数。感谢您的帮助。
答案 0 :(得分:2)
您可能对summaryStatistics()
方法感兴趣。您的方法可以返回IntSummaryStatistics
的实例以携带最小值和最大值(以及其他信息)。至少,您可以使用该方法来避免对数组进行多次遍历:
IntSummaryStatistics stats = IntStream.of(vector).summaryStatistics();
System.out.printf("Min: %d%n", stats.getMinimum());
System.out.printf("Max: %d%n", stats.getMaximum());
对于私有实现,以这种方式使用数组既快捷又容易。但是对于公共API而言,它给客户带来不便和容易出错,并且可能导致维护陷阱。
答案 1 :(得分:1)
利用数组在单个数据结构中返回多个值:
static int[] createVect()
{
Scanner input = new Scanner(System.in);
System.out.print("Number of elements: ");
int n = input.nextInt();
int vector[] = new int[n];
for (int i = 0; i < n; i++)
{
System.out.print("Valor " + (i+1) + ": ");
vector[i] = input.nextInt();
}
int min = Arrays.stream(vector).min().getAsInt();
int max = Arrays.stream(vector).max().getAsInt();
int[] returnArray; // declare returnArray as an array of integers
returnArray = new int[2]; // create an array of 2 integers in returnArray
returnArray[0] = min; // set the first element of returnArray to your min value
returnArray[1] = max; // set the second element of returnArray to your max value
return(returnArray); // return returnArray to the calling function
}
进一步阅读:Returning an array as return value in a method - Emory MathCS
答案 2 :(得分:0)
您不能同时返回不同类型的数据,可以使用更多数据 通过将向量数组创建为实例变量来简化操作的方法。
static func getUsers() -> [String] {
let group = DispatchGroup()
group.join()
var userNames = [String]()
db.collection("users").getDocuments() { (querySnapshot, err) in
defer { group.leave() }
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
let data = document.data()
let first : String = data["First"] as! String
let last : String = data["Last"] as! String
userNames.append("\(first) \(last)")
}
}
}
group.wait()
return userNames
}