Java开发笔记(⼆⼗六)⽅法的输出参数
前⾯介绍了⽅法的输⼊参数,与输⼊参数相对应的则为输出参数,输出参数也被称作⽅法的返回值,意思是经过⽅法的处理最终得到的运算数值。这个返回值可能是整型数,也可能是双精度数,也可能是数组等其它类型,甚⾄允许不返回任何参数。与输⼊参数类似,输出参数也需要定义数据类型,它的返回值类型在⽅法名称前⾯定义,具体位置参见⽅法的定义形式“访问权限类型可选的static 返回值的数据类型⽅法名称(参数类型参数名称)”。
这⾥特别要注意,即使⽅法不返回任何输出参数,也需定义⼀个名叫void的返回值类型,⽽不像输⼊参数若没有则直接留空。⽅法内部倘若中途就要结束处理,那要在指定地点添加⼀⾏“return;”,表⽰代码执⾏到这⾥便退出⽅法。对于⽆需返回输出参数的⽅法,⽅法末尾既可添加“return;”,也可不添加“return;”,因为此时编译器会⾃动结束⽅法。
接下来以求数字的N次⽅根为例,演⽰看看如何实现⼀个返回值类型为void的printNsquareRoot⽅法。该⽅法的输⼊参数包括待求N次⽅根的数字,以及N次⽅根的整型数n,为了避免程序运⾏出错,必须在⽅法⼀开头就进⾏合法性判断,⽐如N次⽅根的n必须是⾃然数,⽽不能是0或负数;⼜⽐如进⾏开偶次⽅根运算时,底数不能为负数;⼀旦输⼊参数的合法性校验不通过,就应当跳过剩余代码直接结束⽅法。据此给出⽅法printNsquareRoot的⽰例代码:
/
/ 不返回任何数据,也就是不存在输出参数,则返回值类型填void。
// printNsquareRoot的⽤途是打印指定数字的N次⽅根
private static void printNsquareRoot(double number, int n) {
if (n <= 0) {
System.out.println("n必须为⾃然数");
return; // 不带任何参数直接返回,return语句表⽰该⽅法的剩余代码都不予执⾏
} else if (n%2==0 && number<0) {
System.out.println("不能对负数开偶次⽅根");
return; // 不带任何参数直接返回,return语句表⽰该⽅法的剩余代码都不予执⾏
}
// 下⾯利⽤⽜顿迭代法求数字的N次⽅根
double nsquareRoot = number;
for (int i=0; i<n*2; i++) {
nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n;
}
System.out.println(number+"的"+n+"次⽅根="+nsquareRoot);
//return; // 如果⽅法的返回值类型为void,则⽅法末尾的return语句可加可不加
}
因为printNsquareRoot⽅法不返回具体参数,所以外部可通过格式“⽅法名称(逗号隔开的参数列表)”调⽤该⽅法。下⾯便是外部调⽤printNsquareRoot⽅法的代码例⼦:
// 下⾯的printNsquareRoot⽅法打印指定数字的N次⽅根
printNsquareRoot(2, 2); // 求数字2的2次⽅根,即对2开平⽅
当然许多时候我们更希望求⽅根⽅法能够返回具体⽅根数值,那么就要将⽅法的返回值类型从void改为double,并且凡是需要结束⽅法处理的地⽅,都得使⽤语句“return ⽅根数值;”返回输出参数,并且⽅法末尾必须写明return语句。于是求⽅根⽅法便改成了如下的代码:
// 只返回⼀个数值,则返回值类型填该数值的变量类型。
// getNsquareRoot的⽤途是计算并返回指定数字的N次⽅根
private static double getNsquareRoot(double number, int n) {
if (n <= 0) {
System.out.println("n必须为⾃然数");
return 0; // 输⼊参数⾮法,则默认返回0
} else if (n%2==0 && number<0) {
System.out.println("不能对负数开偶次⽅根");
return 0; // 输⼊参数⾮法,则默认返回0
}
// 下⾯利⽤⽜顿迭代法求数字的N次⽅根
double nsquareRoot = number;
for (int i=0; i<n*2; i++) {
nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n;
}
return nsquareRoot; // return后⾯跟着要返回的变量名称,该变量的类型与返回值类型保持⼀致
}
既然改写后的getNsquareRoot⽅法存在输出参数,那么外部调⽤该⽅法时,应当定义⼀个变量⽤来接收⽅法的返回值,就像下⾯代码⽰范的这样:
// 下⾯的getNsquareRoot⽅法返回指定数字的N次⽅根
double number1 = 3;
int n1 = 2;
double nsquareRoot = getNsquareRoot(number1, n1);
System.out.println(number1+"的"+n1+"次⽅根="+nsquareRoot);
运⾏上⾯的⽅法调⽤代码,程序的⽇志输出结果如下所⽰:
3.0的2次⽅根=1.7320508100147274
java笔记总结从⽇志发现,getNsquareRoot⽅法在计算数字的偶次⽅根时,只会返回正值⽅根。这其实是不严谨的,⽐如3和-3都是9的平⽅根,然⽽getNsquareRoot⽅法只返回3,却把-3给漏掉了。因此需要对该⽅法加以完善,可考虑将返回值类型改为数组,这样偶次⽅根的正值和负值都能通过数组返回。于是重新定义⼀个getNsquareRootArray⽅法,同时新⽅法的返回值类型为double[],并修改相关的return语句,把返回的输出参数统统改为数组类型。经过数组改造后的getNsquareRootArray⽅法代码如下所⽰:
// 需要返回多个数值(包括0个、1个、2个以及更多),则返回值类型可以填这些数值的数组类型。
// getNsquareRootArray的⽤途是计算并返回指定数字的N次⽅根数组(⽐如2和-2都是4的平⽅根)
private static double[] getNsquareRootArray(double number, int n) {
if (n <= 0) {
System.out.println("n必须为⾃然数");
return new double[]{}; // 输⼊参数⾮法,则默认返回⼀个空的双精度数组
} else if (n%2==0 && number<0) {
System.out.println("不能对负数开偶次⽅根");
return new double[]{}; // 输⼊参数⾮法,则默认返回⼀个空的双精度数组
}
// 下⾯利⽤⽜顿迭代法求数字的N次⽅根
double nsquareRoot = number;
for (int i=0; i<n*2; i++) {
nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n;
}
double[] rootArray;
if (n%2 == 0) { // 求偶次⽅根,则⽅根有正值和负值两个数值
rootArray = new double[]{nsquareRoot, -nsquareRoot};
} else { // 求奇次⽅根,则⽅根只会有⼀个数值
rootArray = new double[]{nsquareRoot};
}
return rootArray; // return后⾯跟着rootArray,其变量类型与返回值类型⼀样都是双精度数组
}
外部调⽤getNsquareRootArray⽅法的时候,需要声明⼀个双精度数组变量,并将⽅法的输出参数赋值给该变量。下⾯是外部调⽤getNsquareRootArray⽅法的代码例⼦:
// 下⾯的getNsquareRootArray⽅法返回指定数字的N次⽅根数组
double number2 = 3;
int n2 = 2;
double[] rootArray = getNsquareRootArray(number2, n2);
for (double root : rootArray) {
System.out.println(number2+"的"+n2+"次⽅根="+root);
}
运⾏上述测试代码,⽇志打印结果如下所⽰:
3.0的2次⽅根=1.7320508100147274
3.0的2次⽅根=-1.7320508100147274
可见最新的getNsquareRootArray⽅法,在计算数字的偶次⽅根之时,正确返回了两个正负⽅根。
更多Java技术⽂章参见《》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论