我有类似的功能
Class Return_two{
public static void main(String args[]){
int b=0;// Declare a variable
int a []= new int[3];// Declare an array [both are return at the end of the user define function fun()]
Return_two r=new Return_two();
int result_store= r.fun(a,b);//where should I store the result meaning is it a normal variable or an array where I store the result?
}
public int [] fun (int[] array,int var)//may be this is not a good Return type to returning an array with a variable so what will be change in return type?
{
for(int counter=0;counter <array.length;counter++)
{ var=var+counter;
}
return( array,var);// Here how could I return this two value in main function?
}
}
现在,这就是我的问题。我想返回一个带有变量的数组,如上所述。但据我所知,可以返回数组或变量,但不能同时返回两者。或者可以返回一个或多个变量,将这些变量作为数组元素。但是如何在main函数中返回一个带变量的数组呢?
答案 0 :(得分:3)
如果要创建多个值,请将它们包装在对象中。
(我无法从你发布的内容中得到一个有意义的名字)
class Result {
private int[] a;
private int b;
public Result(int[] a, int b) {
this.a = a;
this.b = b;
}
//Getters for the instance variables
public int[] getA() {
return a;
}
public int getB() {
return b;
}
}
fun
return new Result(array, var);
一些最佳做法:
不要声明与参数同名的变量名称(a
中的fun
)
在上面的Result
类中,最好在数组a
上创建副本,以避免类外的突变。
List
(这会给你很大的灵活性)修改强>
您的来电者将会是
Return_two r=new Return_two();
Result result = r.fun(a, b);
result.getA();//Do whatever you want to do with the array
result.getB();//Do whatever you want to do with that variable
使用当前版本的(修改过的)代码,为什么要返回数组,因为它与传递给fun
方法的相同?仅返回计算出的var
将对您有用(因此返回类型可以只是int
)。
您还可以在一行fun
中完成您的工作
return (array.length * (array.length - 1)) / 2;
答案 1 :(得分:1)
Wrap these properties into a object, say
Public class FunModel
{
public int[] a;
public int b;
}
then you can return an instance of `FunModel`.
Or
you can use `Tuples`
------------------
Futher Explanation
------------------
此处的返回类型应为模型。 此模型应包含您要作为属性返回的所有内容。 您可以从方法中返回此模型。
public class FunModel
{
public int[] a;
public int b;
public FunModel(int[] a, int b) {
this.a = a;
this.b = b;
}
}
该方法应返回此模型的实例。
public class ReturnTwo {
public static void main(String args[]){
int b=0;
int a []= new int[3];
ReturnTwo returnTwo = new ReturnTwo();
FunModel funModel = returnTwo.fun(a,b);
//other processing
}
public FunModel fun (int[] array,int tempVar)
{
FunModel temp = new FunModel(array,tempVar);
for(int counter=0;counter <array.length;counter++)
{
temp.b = temp.b + counter;
}
return temp;// you return the model with different properties
}
}