1.方法参数的值传递机制

1.说明

    • 方法:必须由其所在类或对象调用才有意义。若方法含有参数:

      1. 形参:方法声明时的参数;

      2. 实参:方法调用时实际传给形参的参数值

    • Java的实参值如何传入方法:Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本传入方法内,而参数本身不受影响。
      • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参;

      • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参。

2.例题

1.如下要求

(1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积。

(2)定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义如下:public void printAreas(Circle c, int time)在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。

(3)在main方法中调用printAreas()方法,调用完毕后输出当前半径值。

代码:

//定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个
//findArea()方法返回圆的面积。
public class Circle { double radius;
public double findArea(){
double m=Math.PI*radius*radius; return m;
} // public static void main(String[] args) {
// Circle c1=new Circle();
// c1.radius=12;
// c1.findArea();
// System.out.println(c1.findArea());
// }
}
//Circle
//(2)定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义
//如下:public void printAreas(Circle c, int time)
//在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。
//例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
// (3)在main方法中调用printAreas()方法,调
//用完毕后输出当前半径值。程序运行结果如图
//所示
import java.util.Scanner; public class PassObject { public void printAreas(Circle c,int time ){
Circle c3 = new Circle();
System.out.println("Radius\t\t"+"Ares");
for (int i=0;i<=time;i++)
{
c3.radius=i;
double s=c3.findArea(); System.out.println( c3.radius+"\t\t\t"+s);
}
System.out.println("now radius is:"+(c3.radius+1)); } public static void main(String[] args) {
PassObject p1=new PassObject();
Circle c2=new Circle();
p1.printAreas(c2,5); } }

运行结果:

2.请用Java写出递归求阶乘(n!)的算法 。

代码:

public class recursionTest1 {
public int ff(int n)
{
if (n==1)
{
return 1;
}else
{
return n*ff(n-1);
}
} public static void main(String[] args) {
recursionTest1 re=new recursionTest1();
int s=re.ff(10);
System.out.println(s);
}
}

运行结果:

3.已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0的整数,求f(10)的值。

代码:

public class recursionTest2 {
public int recursion2(int m)
{
if (m==0)
{
return 1;
}else if (m==1)
{
return 4;
}else
{
return 2*recursion2(m-1)+recursion2(m-2);
}
} public static void main(String[] args) {
recursionTest2 re2=new recursionTest2();
int x=re2.recursion2(10);
System.out.println(x);
}
}

运行结果:

4.已知一个数列:f(20) = 1,f(21) = 4,f(n+2) = 2*f(n+1)+f(n),

其中n是大于0的整数,求f(10)的值。

代码:

public class recursionTest3 {
public static void main(String[] args) {
recursionTest3 re3=new recursionTest3();
System.out.println("f(10)="+re3.jj(10));
System.out.println("f(9)="+re3.jj(9));
System.out.println("f(8)="+re3.jj(8));
System.out.println("f(11)="+re3.jj(11));
System.out.println("f(12)="+re3.jj(2)); }
public long jj(int x)
{
if (x==21)
{
return 4;
}else if (x==20)
{
return 1;
}else if (x<20)
{
return jj(x+2)-(2*jj(x+1));
}else
{
return 2*jj(x-1)+jj(x-2);
}
} }

运行结果:

5.输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值1 1 2 3 5 8 13 21 34 55

规律:一个数等于前两个数之和要求:计算斐波那契数列(Fibonacci)的第n个值,并将整个数列打印出来。

代码:

public class recursionTest4 {
public int Fibonacci(int f)
{
int num=0;
if (f==1)
{
return 1;
}else if (f==2)
{
return 1;
}else
{
return Fibonacci(f-1)+Fibonacci(f-2);
}

}

public static void main(String[] args) {
recursionTest4 re4=new recursionTest4();
int x=re4.Fibonacci(8);
System.out.println("第八位为:"+x);
int m=8;
System.out.println("打印前八位:");
for (int i=1;i<=m;i++)
{
System.out.print(re4.Fibonacci(i)+"\t");
}

}
}

运行结果:

最新文章

  1. 【转载】在HTML中插入swf文件(转)
  2. java程序性能优化
  3. ClockPicker – 时钟风格 Bootstrap 时间选择器
  4. 创建 XMLHttpRequest 对象
  5. 如何在Win10下设置图片的浏览方式为windows照片查看器
  6. 通过C#去调用C++编写的DLL
  7. 关于这两天研究Java打印pdf方法的记录
  8. IE8下载按钮失效
  9. Android的cookie的接收和发送
  10. ios 自动化构建 code-select: error: tool &#39;xcodebuild&#39; requires Xcode, but active developer directory.....
  11. win7和linux下利用命令查看文件md5、sha1、sha256
  12. word交叉引用公式编号时和连公式一起引用
  13. centos6安装openresty
  14. 抓取任务管理器信息实时上传到中国移动onenet平台
  15. Fiddler抓包域名过滤(转载)
  16. C#编程(三十一)----------泛型总结
  17. zTree静态树与动态树的用法——(七)
  18. 校验IPv4和IPv6地址和URL地址
  19. 【C++】static小结
  20. 慎用WSACleanup()

热门文章

  1. mybatis(二)全局配置mybatis-config.xml
  2. ASP.NET Core 中间件(Middleware)(一)
  3. Vue3(四)从jQuery 转到 Vue工程化 的捷径
  4. u-boot 移植 ---&gt;6、引导Linux启动测试
  5. Pure CSS Progress Chart
  6. funny 生成器
  7. server sent events
  8. 关于USDN你想知道的一切
  9. 类属性和__init__的实例属性有何区别?进来了解一下吧
  10. C++算法代码——众数