目录
引入
单个变量以及数组使用不足以解决问题,故引入新概念---类与对象(属性+ 行为)
属性定义
属性
创建对象
访问属性
内存分配机制
成员方法
方法写好后,不调用就不会输出;
定义
返回多个结果
返回一个数组
注意事项
- 方法不能嵌套定义!
- 同一个类的方法,可以直接调用。
- 跨类调用方法,需要先创建对象,然后再通过对象调用。
- 修饰符种类也有关系(作为后面学习的补充内容)
方法递归调用
自己调用自己。
规则
练习--斐波那契数列
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);
}
}
}