经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
Java开发笔记(二十六)方法的输出参数
来源:cnblogs  作者:pinlantu  时间:2018/11/20 10:41:37  对本文有异议

前面介绍了方法的输入参数,与输入参数相对应的则为输出参数,输出参数也被称作方法的返回值,意思是经过方法的处理最终得到的运算数值。这个返回值可能是整型数,也可能是双精度数,也可能是数组等其它类型,甚至允许不返回任何参数。与输入参数类似,输出参数也需要定义数据类型,它的返回值类型在方法名称前面定义,具体位置参见方法的定义形式“访问权限类型 可选的static 返回值的数据类型 方法名称(参数类型 参数名称)”。
这里特别要注意,即使方法不返回任何输出参数,也需定义一个名叫void的返回值类型,而不像输出参数若没有则直接留空。方法内部倘若中途就要结束处理,那要在指定地点添加一行“return;”,表示代码执行到这里便退出方法。对于无需返回输出参数的方法,方法末尾既可添加“return;”,也可不添加“return;”,因为此时编译器会自动结束方法。
接下来以求数字的N次方根为例,演示看看如何实现一个返回值类型为void的printNsquareRoot方法。该方法的输入参数包括待求N次方根的数字,以及N次方根的整型数n,为了避免程序运行出错,必须在方法一开头就进行合法性判断,比如N次方根的n必须是自然数,而不能是0或负数;又比如进行开偶次方根运算时,底数不能为负数;一旦输入参数的合法性校验不通过,就应当跳过剩余代码直接结束方法。据此给出方法printNsquareRoot的示例代码:

  1. // 不返回任何数据,也就是不存在输出参数,则返回值类型填void。
  2. // printNsquareRoot的用途是打印指定数字的N次方根
  3. private static void printNsquareRoot(double number, int n) {
  4. if (n <= 0) {
  5. System.out.println("n必须为自然数");
  6. return; // 不带任何参数直接返回,return语句表示该方法的剩余代码都不予执行
  7. } else if (n%2==0 && number<0) {
  8. System.out.println("不能对负数开偶次方根");
  9. return; // 不带任何参数直接返回,return语句表示该方法的剩余代码都不予执行
  10. }
  11. // 下面利用牛顿迭代法求数字的N次方根
  12. double nsquareRoot = number;
  13. for (int i=0; i<n*2; i++) {
  14. nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n;
  15. }
  16. System.out.println(number+"的"+n+"次方根="+nsquareRoot);
  17. //return; // 如果方法的返回值类型为void,则方法末尾的return语句可加可不加
  18. }

 

因为printNsquareRoot方法不返回具体参数,所以外部可通过格式“方法名称(逗号隔开的参数列表)”调用该方法。下面便是外部调用printNsquareRoot方法的代码例子:

  1. // 下面的printNsquareRoot方法打印指定数字的N次方根
  2. printNsquareRoot(2, 2); // 求数字2的2次方根,即对2开平方

 

当然许多时候我们更希望求方根方法能够返回具体方根数值,那么就要将方法的返回值类型从void改为double,并且凡是需要结束方法处理的地方,都得使用语句“return 方根数值;”返回输出参数,并且方法末尾必须写明return语句。于是求方根方法便改成了如下的代码:

  1. // 只返回一个数值,则返回值类型填该数值的变量类型。
  2. // getNsquareRoot的用途是计算并返回指定数字的N次方根
  3. private static double getNsquareRoot(double number, int n) {
  4. if (n <= 0) {
  5. System.out.println("n必须为自然数");
  6. return 0; // 输入参数非法,则默认返回0
  7. } else if (n%2==0 && number<0) {
  8. System.out.println("不能对负数开偶次方根");
  9. return 0; // 输入参数非法,则默认返回0
  10. }
  11. // 下面利用牛顿迭代法求数字的N次方根
  12. double nsquareRoot = number;
  13. for (int i=0; i<n*2; i++) {
  14. nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n;
  15. }
  16. return nsquareRoot; // return后面跟着要返回的变量名称,该变量的类型与返回值类型保持一致
  17. }

 

既然改写后的getNsquareRoot方法存在输出参数,那么外部调用该方法时,应当定义一个变量用来接收方法的返回值,就像下面代码示范的这样:

  1. // 下面的getNsquareRoot方法返回指定数字的N次方根
  2. double number1 = 3;
  3. int n1 = 2;
  4. double nsquareRoot = getNsquareRoot(number1, n1);
  5. System.out.println(number1+"的"+n1+"次方根="+nsquareRoot);

 

运行上面的方法调用代码,程序的日志输出结果如下所示:

  1. 3.02次方根=1.7320508100147274

 

从日志发现,getNsquareRoot方法在计算数字的偶次方根时,只会返回正值方根。这其实是不严谨的,比如3和-3都是9的平方根,然而getNsquareRoot方法只返回3,却把-3给漏掉了。因此需要对该方法加以完善,可考虑将返回值类型改为数组,这样偶次方根的正值和负值都能通过数组返回。于是重新定义一个getNsquareRootArray方法,同时新方法的返回值类型为double[],并修改相关的return语句,把返回的输出参数统统改为数组类型。经过数组改造后的getNsquareRootArray方法代码如下所示:

  1. // 需要返回多个数值(包括0个、1个、2个以及更多),则返回值类型可以填这些数值的数组类型。
  2. // getNsquareRootArray的用途是计算并返回指定数字的N次方根数组(比如2和-2都是4的平方根)
  3. private static double[] getNsquareRootArray(double number, int n) {
  4. if (n <= 0) {
  5. System.out.println("n必须为自然数");
  6. return new double[]{}; // 输入参数非法,则默认返回一个空的双精度数组
  7. } else if (n%2==0 && number<0) {
  8. System.out.println("不能对负数开偶次方根");
  9. return new double[]{}; // 输入参数非法,则默认返回一个空的双精度数组
  10. }
  11. // 下面利用牛顿迭代法求数字的N次方根
  12. double nsquareRoot = number;
  13. for (int i=0; i<n*2; i++) {
  14. nsquareRoot = (nsquareRoot*(n-1)+number/Math.pow(nsquareRoot, n-1))/n;
  15. }
  16. double[] rootArray;
  17. if (n%2 == 0) { // 求偶次方根,则方根有正值和负值两个数值
  18. rootArray = new double[]{nsquareRoot, -nsquareRoot};
  19. } else { // 求奇次方根,则方根只会有一个数值
  20. rootArray = new double[]{nsquareRoot};
  21. }
  22. return rootArray; // return后面跟着rootArray,其变量类型与返回值类型一样都是双精度数组
  23. }

 

外部调用getNsquareRootArray方法的时候,需要声明一个双精度数组变量,并将方法的输出参数赋值给该变量。下面是外部调用getNsquareRootArray方法的代码例子:

  1. // 下面的getNsquareRootArray方法返回指定数字的N次方根数组
  2. double number2 = 3;
  3. int n2 = 2;
  4. double[] rootArray = getNsquareRootArray(number2, n2);
  5. for (double root : rootArray) {
  6. System.out.println(number2+"的"+n2+"次方根="+root);
  7. }

 

运行上述测试代码,日志打印结果如下所示:

  1. 3.02次方根=1.7320508100147274
  2. 3.02次方根=-1.7320508100147274

 

可见最新的getNsquareRootArray方法,在计算数字的偶次方根之时,正确返回了两个正负方根。

 

更多Java技术文章参见《Java开发笔记(序)章节目录

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号