6 面向对象编程
6.1 对象在内存中的存在形式
6.2 成员方法调用机制
6.3 成员方法传参机制
基本数据类型
全局变量存储在堆上 局部变量存储在栈里
引用数据类型
6.4 方法递归调用
例题 老鼠找路
import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[][] map = new int [n][n]; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==0||i==n-1||j==0||j==n-1){ map[i][j]=1; }else if(Math.random()<0.3){//随机生成墙壁 map[i][j]=1; }else{ map[i][j]=0; } } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(map[i][j]+" "); } System.out.println(); } T sol=new T(); int startx=in.nextInt(); int starty=in.nextInt(); int descx=in.nextInt(); int descy=in.nextInt(); if(sol.sol(map,startx,starty,descx,descy)){ System.out.println("成功 路径如下:"); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ System.out.print(map[i][j]+" "); } System.out.println(); } }else{ System.out.println("失败 无法到达"); } } } class T{ public boolean sol(int[][] map,int x, int y,int desx,int desy){ if(map[desx][desy] == 2){ return true; }else if(map[x][y] == 1||map[x][y]==2){ return false; }else{ map[x][y]=2; if(sol(map,x,y+1,desx,desy)){ return true; }else if(sol(map,x+1,y,desx,desy)) { return true; }else if(sol(map,x,y-1,desx,desy)){ return true; } else if (sol(map,x-1,y,desx,desy)) { return true; }else{ return false; } } } }
例题 汉诺塔
import java.util.Scanner; public class Hannuota { public static void main(String[] args) { Scanner in=new Scanner(System.in); String input=in.nextLine(); String[] parts=input.split(" "); int n=Integer.parseInt(parts[0]); char a=parts[1].charAt(0); char b=parts[2].charAt(0); char c=parts[3].charAt(0); Tower sol=new Tower(); sol.move(n,a,b,c); } } class Tower{ public void move(int n,char a,char b,char c){ if(n==1){ System.out.println(a+"->"+c); }else{ move(n-1,a,c,b); System.out.println(a+"->"+c); move(n-1,b,a,c); } } }
例题 八皇后问题(待解决 读者可分享思路)
6.5 方法重载
同一个类中 方法同名 但形参不一致
6.6 可变参数
基本语法
访问修饰符 返回类型 方法名(数据类型… 形参名) { }
import java.util.Scanner; public class Sumofnum { public static void main(String[] args) { M sol=new M(); System.out.println(sol.sum(1,5,7,9)); System.out.println(sol.sum(1,5)); } } class M{ public int sum(int...nums){//可变参数 int res=0; for(int num:nums){ res+=num; } return res; } }
6.7 构造器
6.8 对象创建过程
6.9 this底层