Lesson 11

函数Functions

函数 debug

样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
public void run() { int size = 4; int[] digits = {3, 7, 5, 6}; int[] guesses = {1, 3, 5, 7}; int[] results = new int[size]; for (int i = 0; i < size; i++) { results[i] = analyse(digits, guess, position); } Console.println(Basic.toString(results));} public int analyse(int[] answers, int check, int position) { if (answers[position] == check) { return 1; } else { for (int i = 0; i < answers.length; i++) { if (answers[i] == check) { return 2; } } return 0; }}
人工内存

每个函数会 开出自己的新空间

debug 工具

断点

进入 函数

跳出 函数

递归

Step 1
1 2 3 4 5 6 7 8 9 10 11 12
public void run(){ int value = f(3); System.out.println(value);} public int f(int value){ if (value == 1) { return 1; } else { return f(value - 1) + 1; }}
Step 2
1 2 3 4 5 6 7 =8 9 10 11 12
public void run(){ int value = f(3); System.out.println(value);} public int f(int value){ int value = 3; if (value == 1) { false return 1; } else { return f(value - 1) + 1; return f(3 - 1) + 1; return f(2) + 1; }}
Step 3
1 2 3 4 5 6 7 =8 9 10 11 12 13 14 15 =16 17 18 19 20
public void run(){ int value = f(3); System.out.println(value);} public int f(int value){ int value = 3; if (value == 1) { false return 1; } else { return f(value - 1) + 1; return f(3 - 1) + 1; return f2(2) + 1; }} public int f2(int value){ int value = 2; if (value == 1) { false return 1; } else { return f(value - 1) + 1; return f(2 - 1) + 1; return f(1) + 1; }}
Step 4
1 2 3 4 5 6 7 =8 9 10 11 12 13 14 15 =16 17 18 19 20 21 22 23 =24 25 26 27 28
public void run(){ int value = f(3); System.out.println(value);} public int f(int value){ int value = 3; if (value == 1) { false return 1; } else { return f(value - 1) + 1; return f(3 - 1) + 1; return f2(2) + 1; }} public int f2(int value){ int value = 2; if (value == 1) { false return 1; } else { return f(value - 1) + 1; return f(2 - 1) + 1; return f3(1) + 1; }} public int f3(int value){ int value = 1; if (value == 1) { true return 1; } else { return f(value - 1) + 1; }}
Step 5
1 2 3 4 5 6 7 =8 9 10 11 12 13 14 15 =16 17 18 19 20 21
public void run(){ int value = f(3); System.out.println(value);} public int f(int value){ int value = 3; if (value == 1) { false return 1; } else { return f(value - 1) + 1; return f(3 - 1) + 1; return f2(2) + 1; }} public int f2(int value){ int value = 2; if (value == 1) { false return 1; } else { return f(value - 1) + 1; return f(2 - 1) + 1; return f3(1) + 1; return 1 + 1; return 2; }}
Step 6
1 2 3 4 5 6 7 =8 9 10 11 12 13
public void run(){ int value = f(3); System.out.println(value);} public int f(int value){ int value = 3; if (value == 1) { false return 1; } else { return f(value - 1) + 1; return f(3 - 1) + 1; return f2(2) + 1; return 2 + 1; return 3; }}
Step 7
1 2 3 4 5 6
public void run(){ int value = f(3); = 3; System.out.println(value);}

特殊结构数据共享的问题

修改变量
1 2 3 4 5 6 7 8 9
public void run(){ int a = 1; f(a); Console.println(a);} public void f(int a) { a = 2;}
修改数组变量
1 2 3 4 5 6 7 8 9
public void run(){ int[] a = {1, 2}; f(a); Console.println(a);} public void f(int[] a) { a = {3, 4};}
修改数组变量 里的内容!

使用 中括号语法,会让 a 变量产生迷幻的同步效果

1 2 3 4 5 6 7 8 9 10
public void run(){ int[] a = {1, 2}; f(a); Console.println(a);} public void f(int[] a) { a[0] = 3; a[1] = 4;}

字符 与 字符串Characters and Strings

概览

字符

什么是

一个文字

字面量

用单引号括起来

1 2 3 4
char number = 'Z';char letter = 'Z';char ideographic = '赵';char emoji = '😝';
注意

有且只能有一个字符,不能多,不能少

1!2!
char empty = '';char zzax = 'ZZAX';

字符串

什么是

一堆字符

字符数组

字面量

双引号括起来

1 2
String brand = "ZZAX";String letter = "Z";
空字符串

数组可以没有元素

字符串也可以没有字符

1
String empty = "";

字符Characters

字符实质

一本字典

每页有一个字

存储页数

标准

ASCII 远古小字典 查看

Unicode 地球大字典 查看

运算

char 可以视为 int 进行数学计算

尺寸 比 int

1 2
char c1 = 'A';char c2 = (char)(c1 + 32);

运算时的类型问题

charchar 运算的结果 是 int

1 2
char c1 = 'A';char c2 = (char)(c1 + 'a' - 'A');

类型决定打印效果

1 2 <3 4 <
char c1 = 'A';Console.println(c1);A int pageNumber = c1;Console.println(pageNumber);65

ZZAX 微信公众

文档一更新,立刻告诉你