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);
运算时的类型问题
char
和 char
运算的结果 是 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