前言
面向对象基础部分学习时的练习题总结。
面向对象
什么是面向对象?
面向对象就是把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。
特点
1)封装
2)继承
3)多态
猴子吃桃
有一堆桃子,猴子第一天吃了其中的一半多一个,以后猴子每天都会吃剩下桃子中的一半多一个。到第10天时,猴子正想吃时,发现只有1个桃子了。
问:最初有多少个桃子
思路分析:
1)day = 10, 有一个桃子
2)day = 9, 有(day10 + 1) * 2 = 4 个桃子
3)day = 8, 有(day9 + 1) * 2 = 10 个桃子
4)规律:前一天的桃子 = (后一天的桃子 + 1) * 2 个
代码:
public class MonkeyAndPeach { public static void main(String[] args) { AA a = new AA(); int number = a.peach(1); if(number != 0) { System.out.println("最初有" + number + "个桃子"); } } } class AA{ public int peach(int day) { if(day == 10) { // 第10天,只有一个桃子 return 1; } else if(day >= 1 && day <= 9) { return (peach(day + 1) + 1) * 2; } else { System.out.println("天数错误,要在 1 - 10 范围内"); return 0; } }
输出结果:
斐波那契数列
使用递归的方法求出斐波那契数
1,1,2,3,5,8,13……
输入一个整数n,求出它的值为多少
思路分析:
1)当n = 1时,斐波那契数是1
2)当n = 2时,斐波那契数是1
3)当n > 3时,斐波那契数是前两个数之和
代码:
import java.util.Scanner; public class RecursionExercise01 { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); System.out.println("请输入一个整数:"); int n = myScanner.nextInt(); AA a = new AA(); int result = a.fibonacci(n); if(result != 0) { System.out.println("当n=" + n + "时,对应的斐波那契数为:" + result); } } } class AA { public int fibonacci(int n) { if(n >= 1) { if(n == 1 || n == 2) { return 1; } else { return fibonacci(n - 1) + fibonacci(n - 2); } } else { System.out.println("输入数据不符合标准,n应 >= 1"); return 0; } } }
输出结果:
可以用来查看输入不同的数时对应的斐波那契数。
将对象作为参数传递给方法
题目要求:
1.定义一个 Circle 类,包含一个double型的radius属性,
代表圆的半径,findArea()方法返回圆的面积
2.定义一个 PassObject 类,在类中定义一个方法 printAreas(),
该方法的定义如下:public void printAreas(Circle c , int times)
3.在 printAreas 方法中打印输出1到times之间的每个整数的半径值,以及对应面积。
例如:times为5时,则输出半径1,2,3,4,5,以及对应的圆面积。
4.在main方法中调用printAreas()方法,调用完毕后输出当前半径值。
代码:
public class Homework12 { public static void main(String[] args) { PassObject po = new PassObject(); po.printAreas(5); } } class Circle { double radius; public Circle() { } public Circle(double radius) { this.radius = radius; } public double findArea() { return Math.PI * radius * radius; } public void setRadius(double radius) { this.radius = radius; } } class PassObject { public void printAreas(int times) { System.out.println("radius\tarea"); Circle c = new Circle(); for(int i = 1; i <= times; i++) { // 输出1到times之间的每个整数的半径值 c.setRadius(i); // 修改 c 对象的半径值 System.out.println((double)i + "\t" + c.findArea()); } }
输出结果:
总结
国庆假期已过,不能停下学习的脚步,继续努力!