009面向对象编程(上)-2
方法的重载、可变个数形参
本质上两种都是一样的,传递的是数组
package com.atguigu.exer;
/*
* 测试可变个数形参传递机制
*/
public class ArraysPassTest {
public static void main(String[] args) {
ArraysPassTest test = new ArraysPassTest();
// String[] temp = new String[]{"hello","World","Test"};
test.print(new String[]{"hello","World","Test"}); //传递匿名数组
test.print("Printing");
}
public void print(String arr){
System.out.println(arr);
}
public void print(String... arr){
//输出数组
for(int i = 0; i < arr.length; i++){
if(i == 0){
System.out.print("[ " + arr[i]);
}else if(i > 0 && i < arr.length - 1){
System.out.print(", " + arr[i]);
}else{
System.out.println(", " + arr[i] + " ]");
}
}
}
}
方法的值传递
例1
例2
例3
练习1:替换要输入的值
package com.atguigu.exer;
public class PrintTest {
public static void main(String[] args) {
int a = 10;
int b = 10;
method(a,b);
System.out.println(a);
System.out.println(b);
}
public static void method(int a, int b){
a = 100;
b = 200;
System.out.println(a);
System.out.println(b);
System.exit(0);//退出程序
}
}
练习2:除后并赋值
package com.atguigu.exer;
import java.util.Arrays;
/*
* 定义一个int型的数组:int[] arr = new int[]{12,3,3,34,56,77,432};
让数组的每个位置上的值去除以首位置的元素,得到的结果,作为该位置上的 新值。遍历新的数组。
*/
public class PrintTest01 {
public static void main(String[] args) {
int[] arr = new int[]{12,3,3,34,56,77,432};
for(int i = arr.length - 1; i >= 0; i--){
arr[i] = arr[i]/arr[0];
}
System.out.println(Arrays.toString(arr));
}
}
练习3:熟悉char类型数组
package com.atguigu.exer;
public class PrintCharArr {
public static void main(String[] args) {
int[] arr = new int[10];
System.out.println(arr); //地址值
char[] arr1 = new char[10];
System.out.println(arr1); //什么都没有
char[] arr2 = new char[]{'a','b','c'};
System.out.println(arr2); //abc
}
}
练习4:将对象作为参数传递给方法
package com.atguigu.exer;
/*
* 定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个
findArea()方法返回圆的面积。
定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义
如下:public void printAreas(Circle c, int time)
在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。
例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
在main方法中调用printAreas()方法,调 用完毕后输出当前半径值。程序运行结果如图 所示。
*/
public class CircleTest {
public static void main(String[] args) {
PassObject passObject = new PassObject();
passObject.printAreas(new Circle(), 5);
}
}
class Circle{
double radius;
public double findArea(double radius){
return Math.PI * radius * radius;
}
}
class PassObject{
public void printAreas(Circle c, int time){
System.out.println("Radius\t\tArea");
int i = 1;
for(; i <= time; i++){
c.radius = i;
System.out.println(c.radius + "\t\t" + c.findArea(c.radius));
}
System.out.println("now radius is: " + (double)i);
}
}
递归方法
练习1:输出阶乘
package com.atguigu.exer;
/*
* 请用Java写出递归求阶乘(n!)的算法
*/
public class AriTest01 {
public static void main(String[] args) {
AriTest01 test = new AriTest01();
System.out.println(test.ari(10));
}
public int ari(int sum){
if(sum == 1){
return 1;
}else{
return sum * ari(sum - 1);
}
}
}
练习2:f(n+2)=2*f(n+1) + f(n)
package com.atguigu.exer;
/*
* 已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2*f(n+1) + f(n),其中n是大于0
的整数,求f(10)的值。
*/
public class AriTest02 {
public static void main(String[] args) {
AriTest02 ari = new AriTest02();
System.out.println(ari.f(10));
}
public int f(int sum){
if(sum == 0){
return 1;
}
if(sum == 1){
return 4;
}
return f(sum-2) + 2*f(sum-1);
}
}
练习3:f(n+2)=2*f(n+1) + f(n)
package com.atguigu.exer;
/*
* 已知一个数列:f(20) = 1,f(21) = 4,f(n+2) = 2*f(n+1)+f(n),
其中n是大于0的整数,求f(10)的值
*/
public class AriTest03 {
public static void main(String[] args) {
AriTest03 ari = new AriTest03();
System.out.println(ari.f(10));
}
public int f(int n){
if(n == 20){
return 1;
}else if(n == 21){
return 4;
}else if(n < 20){
return f(n+2) - 2*f(n+1);
}else{
return 2*f(n-1)+f(n-2);
}
}
}
练习4:斐波那契数列
package com.atguigu.exer;
/*
* 输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值
1 1 2 3 5 8 13 21 34 55
规律:一个数等于前两个数之和
要求:计算斐波那契数列(Fibonacci)的第n个值,并将整个数列打印出来
*/
public class AriTest04 {
public static void main(String[] args) {
AriTest04 ari = new AriTest04();
System.out.println(ari.fib(10));
}
public int fib(int i){
if(i == 1){
return 1;
}else if(i == 2){
return 1;
}
return fib(i-1) + fib(i-2);
}
}
练习5:汉诺塔问题
练习6:快排
计算递归次数:n = (n-1) + (n-2) + 1
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步