Java 类与对象 OOP(属性、方法)

目录

引入

属性定义

属性

创建对象 

访问属性

内存分配机制 

成员方法

定义

返回多个结果

注意事项

方法递归调用

规则

练习--斐波那契数列

练习--猴子吃桃子

练习--迷宫

练习--汉诺塔


引入

        单个变量以及数组使用不足以解决问题,故引入新概念---类与对象(属性+ 行为)

属性定义

属性

创建对象 

访问属性

内存分配机制 

 

成员方法

 

 

 方法写好后,不调用就不会输出;

定义

返回多个结果

        返回一个数组

 

 

注意事项

  •  方法不能嵌套定义!
  • 同一个类的方法,可以直接调用。
  • 跨类调用方法,需要先创建对象,然后再通过对象调用。
  • 修饰符种类也有关系(作为后面学习的补充内容)

方法递归调用

        自己调用自己。

 

规则

练习--斐波那契数列

import java.util.Scanner;
public class test01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		T t1 = new T();
		Scanner myScanner = new Scanner(System.in);
		System.out.print("请问你想要斐波那契数列的第几个: ");
		int i = myScanner.nextInt();
		System.out.println("你想要的数字是:" + t1.Fibonacci(i));
	}

}

class T{
	
	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("请输入一个比1大的数字!!!");
			return 0;
		}
		
	}
}

练习--猴子吃桃子

        有一堆桃子,猴子第一天吃其中的一半,再多吃一个,以后的每天猴子都吃其中的一半再多吃一个。到第十天的时候,还没吃,发现只剩一个桃子。问:最初有几个桃子???

package pk1;

//import java.util.Scanner;

public class test02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		int day = 1;
		
		TT t2 = new TT();
		
		System.out.println("第"+day+"天有"+t2.peaches(day)+"个桃子");
		
	}

}

class TT{
	/*
	 该天的原本的桃子 = (明天的桃子 + 1) * 2;
	 
	 */
	public int peaches(int day) {
		
		if(day==10) {
			
			return 1;
			
		}else if(day<=0) {
			
			System.out.println("day需要大于0!!!");
			
		}else {
			
			return (peaches(day + 1) + 1) * 2;
		}
		
		
		return 0;
	}
}

练习--迷宫

package pk1;

public class test03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//用二维数组创建迷宫,1表示障碍物,0表示可走
		int [][]map = new int[8][7];
		//将边框设置为1;
		for(int i=0;i<7;i++) {
			map[0][i]=1;
			map[7][i]=1;
		}
		for(int i=0;i<8;i++) {
			map[i][0]=1;
			map[i][6]=1;
		}
		//设置障碍
		map[3][1]=1;
		map[3][2]=1;
		
		//输出地图
		for(int i=0;i<8;i++) {
			for(int j=0;j<7;j++) {
				System.out.print(map[i][j]+" ");
			}
			System.out.println();
		}
		System.out.println("*************");
		TTT t3 = new TTT();
		t3.finway(map, 1, 1);
		
		//输出结果地图
		for(int i=0;i<8;i++) {
			for(int j=0;j<7;j++) {
				System.out.print(map[i][j]+" ");
			}
			System.out.println();
		}
		
	}

}

class TTT{
	//1.使用递归回溯来解决老鼠出迷宫
	//2.找到返回true,否则返回false
	//3.0表示可以走,1表示障碍物,2表示可以走,3表示走了走不通
	//4.i,j是老鼠的位置,初始化位置为1,1
	//5.当map[6][5]=2时,找到通路了,否则继续找
	//6.规定找路的策略 下右上左
	public boolean finway(int[][]map,int i,int j) {
		
		if(map[6][5] == 2) {//找到出口
			return true;
		}else {
			if(map[i][j] == 0) {//可以走
				//可以走通
				map[i][j] = 2;
			
				//使用找路策略来确定该位置是否真的可以走通
				if(finway(map,i+1,j)) {//往下
					return true;
				}else if(finway(map,i,j+1)) {//往右
					return true;
				}else if(finway(map,i-1,j)) {//上
					return true;
				}else if(finway(map,i,j-1 )) {//左
					return true;
				}else {
					map[i][j] = 3;
					return false;
				}
				
			}else {
				return false;
				
			}
		}
	}
}

	

练习--汉诺塔

package Hannota;

public class hannota {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		H hanno = new H();
		hanno.move(5, 'A', 'B', 'C');
	}

}

class H{
	public void move(int num, char a,char b,char c) {
		if(num == 1) {
			//若只有一个盘,直接移到c
			System.out.println(a + "-> " + c);
		}else {
			//若多个,则看成两个
			//1.把n-1个盘移到b
			//2.把最下面的盘移到c
			//3.把b盘移到c
			move(num-1,a,c,b);
			System.out.println(a + "-> " + c);
			move(num-1,b,a,c);
		}
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值