项目Projects

猜数字

Q10

五子棋

Q56

敲代码的节奏

1.

分析步骤

逐步写

2.

测试

3.

整理

4.

回到步骤 1

抽离大法Extract Method

什么是

方法抽离

将一大段代码抽离出来,形成一个函数

案例

使用前
1 2 3 4 5 6 7 8 9
public void run(){ int a = 1; int b = 10; int sum = 0; for (int i = a; i < b; i++){ sum += i; } System.out.println(sum);}

将上面高亮的部分抽离出来

使用后
1 2 3 4 5 6 7 8 9 10 11
public void run(){ System.out.println(sum(1, 10));} public int sum(int start, int end) { int sum = 0; for (int value = start; value < end; value++){ sum += value; } return sum;}

步骤

1.

识别函数级别的输入输出

输入:代码上面定义的,但里面要用到的

输出:里面定义的,外面要用到的

输入a, b
输出sum
2.

声明函数

输入变为参数,输出变为返回值

1 2 3 4 5 6 7 8 9 10 11+12+13+
public void run(){ int a = 1; int b = 10; int sum = 0; for (int i = a; i < b; i++){ sum += i; } System.out.println(sum);} public int f(int a, int b) { }
3.

移植代码

原代码改为函数调用,用变量接住返回值

1 2 3 4-5-6-7-8+9 10 11 12 13+14+15+16+17+18
public void run(){ int a = 1; int b = 10; int sum = 0; for (int i = a; i < b; i++){ sum += i; } int sum = f(a, b); System.out.println(sum);} public int f(int a, int b) { int sum = 0; for (int i = a; i < b; i++){ sum += i; } return sum;}
4.

重新定义

重新审视被抽出来的代码,

给函数和变量,起更符合局部代码意义的名字

1 2 3 4*5 6 7 8*9 10*11*12 13 14
public void run(){ int a = 1; int b = 10; int sum = sum(a, b); System.out.println(sum);} public int sum(int start, int end) { int sum = 0; for (int value = start; value < end; value++){ sum += value; } return sum;}
5.

优化原始函数

原始函数甚至可以更简单

1 2-3-4-5*6 7 8 9 10 11 12 13 14
public void run(){ int a = 1; int b = 10; int sum = sum(a, b); System.out.println(sum(1, 10));} public int sum(int start, int end) { int sum = 0; for (int value = start; value < end; value++){ sum += value; } return sum;}

多返回值Returning Multiple Values

什么

在有些业务下,为我们希望在一个函数内同时返回多个值,这个时候怎么办

案例

1 2 3 4 5 6 7 8
public void run(){ int (x, y) = randomLocation(); Console.println(x + ", " + y);} public (int, int) randomLocation() { return (3, 4);}

明显,上面这么做,是不符合 java 语法的。

java 只允许一个返回值

利用数组

如果要返回的多个值,都是 一个类型,

可以使用数组打包后,返回。

接住返回值后,再拆解

1 2 3 4 5 6 7 8 9 10 11
public void run(){ int[] location = randomLocation(); int x = location[0]; int y = location[1]; Console.println(x + ", " + y);} public int[] randomLocation() { int[] location = {3, 4}; return location;}

利用自定义类型

如果要返回的多个值,不是同一个类型

就需要使用面向对象的语法,自定义一个类了,详情继续学习

JAVA 112 - 高级内存 与 面向对象

夸函数变量

案例

使用前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public class Game { ... public void run(){ int[] arr = ...; print(arr); ... play(arr); ... } public void print(int[] arr) { ... } public void play(int[] arr) { ... }}
使用后
1 2 3+4 5 6 7*8 9*10 11 12 13*14 15 16 17*18 19 20
public class Game { ... int[] arr; public void run(){ arr = ...; print(); ... play(); ... } public void print() { ... } public void play() { ... }}

效果

声明的变量 可以跨函数访问

每个函数访问的都是那一个变量

语法

把一般的变量声明, 放在跟函数声明 同级别的位置上

结构

是什么

将紧密的数据打包成一个整体,从而定义出一个全新的自定义类型

案例

使用前
1 2
int x = 3;int y = 4;
使用后

Point.java

1 2 3 4
public class Point { int x; int y; }
1 2 3
Point p = new Point();p.x = 3;p.y = 4;

语法

定义自定义类型

Point.java

1 2 3 4
public class 自定义类型名 { 内嵌的数据声明}public class Point { int x; int y; }
创建
1
自定义类型名 变量名 = new 自定义类型名();Point p = new Point();
使用
1 2
自定义类型名.内嵌数据p.x = 3;Console.println(p.x);

使用自定义类型做对返回值

1 2 3 4 5 6 7 8 9 10 11
public void run(){ Point location = randomLocation(); Console.println(location.x + ", " + location.y);} public Point randomLocation() { Point location = new Point(); location.x = 3; location.y = 4; return location;}

ZZAX 微信公众

文档一更新,立刻告诉你