From e483388fbd871f66e8d3af09265657fefa7dfced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=94=A1=E6=B3=BD=E9=92=A6?= <2978477807@qq.com> Date: Sat, 3 Dec 2022 19:56:17 +0800 Subject: [PATCH 1/4] =?UTF-8?q?if=E8=AF=AD=E5=8F=A5=E5=92=8CSwitch?= =?UTF-8?q?=E7=9A=84=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...46\347\232\204\344\275\277\347\224\250.md" | 0 ...0221202 switch\350\257\255\346\263\225.md" | 81 +++++++ ...\344\271\213if\350\257\255\345\217\245.md" | 228 ++++++++++++++++++ 3 files changed, 309 insertions(+) rename "08 \350\224\241\346\263\275\351\222\246/20221201 java\347\232\204\345\237\272\347\241\200\347\224\250\346\263\225.md" => "08 \350\224\241\346\263\275\351\222\246/20221201 \350\277\220\347\256\227\347\254\246\347\232\204\344\275\277\347\224\250.md" (100%) create mode 100644 "08 \350\224\241\346\263\275\351\222\246/20221202 switch\350\257\255\346\263\225.md" create mode 100644 "08 \350\224\241\346\263\275\351\222\246/20221202 \346\265\201\347\250\213\346\216\247\345\210\266\350\257\255\345\217\245\345\210\206\346\224\257\347\273\223\346\236\204\344\271\213if\350\257\255\345\217\245.md" diff --git "a/08 \350\224\241\346\263\275\351\222\246/20221201 java\347\232\204\345\237\272\347\241\200\347\224\250\346\263\225.md" "b/08 \350\224\241\346\263\275\351\222\246/20221201 \350\277\220\347\256\227\347\254\246\347\232\204\344\275\277\347\224\250.md" similarity index 100% rename from "08 \350\224\241\346\263\275\351\222\246/20221201 java\347\232\204\345\237\272\347\241\200\347\224\250\346\263\225.md" rename to "08 \350\224\241\346\263\275\351\222\246/20221201 \350\277\220\347\256\227\347\254\246\347\232\204\344\275\277\347\224\250.md" diff --git "a/08 \350\224\241\346\263\275\351\222\246/20221202 switch\350\257\255\346\263\225.md" "b/08 \350\224\241\346\263\275\351\222\246/20221202 switch\350\257\255\346\263\225.md" new file mode 100644 index 0000000..f93e3e6 --- /dev/null +++ "b/08 \350\224\241\346\263\275\351\222\246/20221202 switch\350\257\255\346\263\225.md" @@ -0,0 +1,81 @@ +## 1.switch语句 + +#### 1.1分支语句switch语句 + +- ##### 格式 + + +~~~java +switch (表达式) { + case 1: + 语句体1; + break; + case 2: + 语句体2; + break; + ... + default: + 语句体n+1; + break; +} +~~~ + +- ##### 执行流程: + + - 首先计算出表达式的值 + + - 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到 break就会结束。 + + - 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。 + +## 1.2 switch案例-减肥计划 + +- ##### 需求:键盘录入星期数,显示今天的减肥活动 +~~~java +周一:跑步 +周二:游泳 +周三:慢走 +周四:动感单车 +周五:拳击 +周六:爬山 +周日:好好吃一顿 +~~~ + +- ##### 示例代码: +~~~java +public static void main(String[] args){ + // 1. 键盘录入星期数据,使用变量接收 + Scanner sc = new Scanner(System.in); + System.out.println("请输入"); + int week = sc.nextInt(); + // 2. 多情况判断,采用switch语句实现 + switch(week){ + // 3. 在不同的case中,输出对应的减肥计划 + case 1: + System.out.println("跑步"); + break; + case 2: + System.out.println("游泳"); + break; + case 3: + System.out.println("慢走"); + break; + case 4: + System.out.println("动感单车"); + break; + case 5: + System.out.println("拳击"); + break; + case 6: + System.out.println("爬山"); + break; + case 7: + System.out.println("好好吃一顿"); + break; + default: + System.out.println("您的输入有误"); + break; + } + } +} +~~~ \ No newline at end of file diff --git "a/08 \350\224\241\346\263\275\351\222\246/20221202 \346\265\201\347\250\213\346\216\247\345\210\266\350\257\255\345\217\245\345\210\206\346\224\257\347\273\223\346\236\204\344\271\213if\350\257\255\345\217\245.md" "b/08 \350\224\241\346\263\275\351\222\246/20221202 \346\265\201\347\250\213\346\216\247\345\210\266\350\257\255\345\217\245\345\210\206\346\224\257\347\273\223\346\236\204\344\271\213if\350\257\255\345\217\245.md" new file mode 100644 index 0000000..086944e --- /dev/null +++ "b/08 \350\224\241\346\263\275\351\222\246/20221202 \346\265\201\347\250\213\346\216\247\345\210\266\350\257\255\345\217\245\345\210\206\346\224\257\347\273\223\346\236\204\344\271\213if\350\257\255\345\217\245.md" @@ -0,0 +1,228 @@ +## 3. 流程控制语句 + +在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 + +### 3.1 流程控制语句分类(了解) + +​ 顺序结构 + +​ 分支结构(if, switch) + +​ 循环结构(for, while, do…while) + +### 3.2 顺序结构(了解) + +顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。 + +顺序结构执行流程图: + +![1545615769372](E:\教材\后端\2img\图片2.png) + +### 3.3 分支结构之if语句 + +#### 3.3.1 if语句格式1(理解) + +~~~java +格式: +if (关系表达式) { + 语句体; +} +~~~ + +执行流程: + +①首先计算关系表达式的值 + +②如果关系表达式的值为true就执行语句体 + +③如果关系表达式的值为false就不执行语句体 + +④继续执行后面的语句内容 + +![1545616039363](E:\教材\后端\2img\图片3.png) + +示例: + +~~~java +public class IfDemo { + public static void main(String[] args) { + System.out.println("开始"); + + // 如果年龄大于18岁, 就可以上网吧 + int age = 17; + + if(age >= 18){ + // int a = 10; + System.out.println("可以上网吧"); + } + + System.out.println("结束"); + } +} +~~~ + +#### 3.3.2 if语句格式2(理解) + +~~~java +格式: +if (关系表达式) { + 语句体1; +} else { + 语句体2; +} +~~~ + +执行流程: + +①首先计算关系表达式的值 + +②如果关系表达式的值为true就执行语句体1 + +③如果关系表达式的值为false就执行语句体2 + +④继续执行后面的语句内容 + +![1545616221283](E:\教材\后端\2img\图片4.png) + +示例:奇偶数 + +​ 任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数。 + +~~~java +public class Demo2If { + public static void main(String[] args) { + // 程序判断一个数, 是奇数还是偶数 + int num = 9; + + if(num % 2 == 0){ + System.out.println("偶数"); + }else{ + System.out.println("奇数"); + } + } +} +~~~ + +#### 3.3.3 if语句格式3(理解) + +~~~java +格式: +if (关系表达式1) { + 语句体1; +} else if (关系表达式2) { + 语句体2; +} +… +else { + 语句体n+1; +} +~~~ + +执行流程: + +①首先计算关系表达式1的值 + +②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值 + +③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值 + +④… + +⑤如果没有任何关系表达式为true,就执行语句体n+1。 + +![1545616667104](E:\教材\后端\2img\图片5.png) + +示例: + +​ 定义一个在0~100之间的变量a, 90~100优秀,80~89良好,70~79中等,60~69及格,0~59请努力加油! + +~~~java +public class Demo3If { + public static void main(String[] args){ + int score = 65; + if(score >= 90 && score <= 100){ + System.out else if (score >= 80 && score <= 89){ + System.out.println("良好"); + }else if (score >= 70 && score <= 79){ + System.out.println("中等"); + }else if (score >= 60 && score <= 69){ + System.out.println("及格"); + }else if (score >= 0 && score <= 59){ + System.out.println("请努力加油"); + }else{ + System.out.println("成绩有误!"); + } + } +} +~~~ + +#### 3.3.4 if语句格式3案例(应用) + + + +​ ①小明的考试成绩未知,可以使用键盘录入的方式获取值 + +​ ②由于奖励种类较多,属于多种判断,采用if...else...if格式实现 + +​ ③为每种判断设置对应的条件 + +​ ④为每种判断设置对应的奖励 +~~~java +import java.util.Scanner; +public class IfTest02 { + public static void main(String[] args){ + // 1. 使用Scanner录入考试成绩 + Scanner sc = new Scanner(System.in); + System.out.println("请输入您的成绩:"); + int score = sc.nextInt(); + // 2. 判断成绩是否在合法范围内 0~100 + if(score >=0 && score <= 100){ + // 合法成绩 + // 3. 在合法的语句块中判断成绩范围符合哪一个奖励 + if(score >= 95 && score <= 100){ + System.out.println("自行车一辆"); + }else if(score >= 90 && score <= 94){ + System.out.println("游乐场一次"); + }else if(score >= 80 && score <= 89){ + System.out.println("变形金刚一个"); + }else { + System.out.println("挨顿揍, 这座城市又多了一个伤心的人~"); + } + }else{ + // 非法的话, 给出错误提示 + System.out.println("您的成绩输入有误!"); + } + } +} +~~~ + +### 作业 + +~~~java +import java.util.Scanner; + +public class inquire { + public static void main(String[] args) { + + Scanner sc = new Scanner(System.in); + System.out.println("请输入查询的数据(如输入超过二及以上则查询第一位)"); + + char value = sc.next().charAt(0); + double va = (double) value; + System.out.println("输入~结束查询"); + if (va <= 90 && va >= 65) { + System.out.println("您输入的为大写"); + if (va == 65 | va == 79 | va == 69 | va == 73 | va == 85 | va == 86) { + System.out.println("您输入的为韵母"); + } + } else if (va <= 122 && va >= 97) { + System.out.println("您输入的为小写"); + if (va == 97 | va == 111 | va == 101 | va == 105 | va == 117 | va == 118) { + System.out.println("您输入的为韵母"); + } + } else { + System.out.println("你输入的不是字母"); + } + } +} +~~~ \ No newline at end of file -- Gitee From 5052897196a2ea0fce2314b8660b8a072812fe6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=94=A1=E6=B3=BD=E9=92=A6?= <2978477807@qq.com> Date: Wed, 7 Dec 2022 20:24:34 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\222\214while\345\276\252\347\216\257 .md" | 232 ++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 "08 \350\224\241\346\263\275\351\222\246/20221206 for\345\276\252\347\216\257\345\222\214while\345\276\252\347\216\257 .md" diff --git "a/08 \350\224\241\346\263\275\351\222\246/20221206 for\345\276\252\347\216\257\345\222\214while\345\276\252\347\216\257 .md" "b/08 \350\224\241\346\263\275\351\222\246/20221206 for\345\276\252\347\216\257\345\222\214while\345\276\252\347\216\257 .md" new file mode 100644 index 0000000..f45e0db --- /dev/null +++ "b/08 \350\224\241\346\263\275\351\222\246/20221206 for\345\276\252\347\216\257\345\222\214while\345\276\252\347\216\257 .md" @@ -0,0 +1,232 @@ +### 1. for 循环 + +#### 1.1循环语句-for 循环 + +- 循环 + + +循环语句可以在满足循环条件的情况下,反复执行一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候吧循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。 + +- for 循环格式: + +~~~java +for (初始化语句;条件判断语句;条件控制语句){ + 循环一语句; +} +~~~ + +- 格式解释: + - 初始化语句: 用于表示循环开启时的初始状态,简单说就是循环开始的时候什么样 + - 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去 + - 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情 + - 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去 + +- 执行流程 + + ①执行初始化语句 + + ②执行条件判断语句,看其结果是true还是false 如果是false,循环结束 如果是true,继续执行 + + ③执行循环体语句 + + ④执行条件控制语句 + + ⑤回到②继续 + +### 1.2 for循环案例-输出数据1-5和5-1 + +- 需求:在控制台输出1-5和5-1的数据 +- 示例代码: + +~~~java +public class ForTest01 { + public static void main(String[] args) { + //需求:输出数据1-5 + for(int i=1; i<=5; i++) { + System.out.println(i); + } + System.out.println("--------"); + //需求:输出数据5-1 + for(int i=5; i>=1; i--) { + System.out.println(i); + } + } +} + +~~~ + +### 1.3 for循环的案例-求1-5数据和 + +- 需求:求1-5之间的数据和,并把求和结果在控制台输出 +- 示例代码: + +~~~java +public class ForTest02 { + public static void main(String[] args) { + //求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0 + int sum = 0; + //从1开始到5结束的数据,使用循环结构完成 + for(int i=1; i<=5; i++) { + //将反复进行的事情写入循环结构内部 + // 此处反复进行的事情是将数据 i 加到用于保存最终求和的变量 sum 中 + sum += i; + /* + sum += i; sum = sum + i; + 第一次:sum = sum + i = 0 + 1 = 1; + 第二次:sum = sum + i = 1 + 2 = 3; + 第三次:sum = sum + i = 3 + 3 = 6; + 第四次:sum = sum + i = 6 + 4 = 10; + 第五次:sum = sum + i = 10 + 5 = 15; + */ + } + //当循环执行完毕时,将最终数据打印出来 + System.out.println("1-5之间的数据和是:" + sum); + } +} +~~~ + +本题要点 + +- 今后遇到的需求中,如果带有求和二字,请立即联想到求和变量 + +- 求和变量的定义位置,必须在循环外部,如果在循环内部则计算出的数据将是错误的 + +### 1.4 for循环案例-求1-100偶数和 + +- 需求:求1-100之间的偶数和,并把求和结果在控制台输出 +- 示例代码: + +~~~java +public class ForTest03 { + public static void main(String[] args) { + //求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0 + int sum = 0; + //对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅是结束条件不同 + for(int i=1; i<=100; i++) { + //对1-100的偶数求和,需要对求和操作添加限制条件,判断是否是偶数 + if(i%2 == 0) { + sum += i; + } + } + //当循环执行完毕时,将最终数据打印出来 + System.out.println("1-100之间的偶数和是:" + sum); + } +} +~~~ + +### 1.5 for循环案例-水仙花数 + +- 需求:在控制台输出所有的“水仙花数” +- 解释:什么是水仙花数? + - 水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数 + - 例如 153 3*3*3 + 5*5*5 + 1*1*1 = 153 + +- 思路: + +​ 1.获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for 循环 获取 + +​ 2.获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数 + +- 示例代码 +~~~java +public class ForTest04 { + public static void main(String[] args) { + //输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结 +束 + for(int i=100; i<1000; i++) { + //在计算之前获取三位数中每个位上的值 + int ge = i%10; + int shi = i/10%10; + int bai = i/10/10%10; + + //判定条件是将三位数中的每个数值取出来,计算立方和后与原始数字比较是否相等 + if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) { + //输出满足条件的数字就是水仙花数 + System.out.println(i); + } + } + } +} +~~~ + +## while循环 + +- 格式 + + ```java + 初始化语句; + while (条件判断语句){ + 循环语句体; + 条件控制语句; + } + ``` + +- 案例 + + ```java + //需求:在控制台输出5次"HelloWorld" + public class WhileDemo { + public static void main(String[] args) { + //for循环实现 + for(int i=1; i<=5; i++) { + System.out.println("HelloWorld"); + } + System.out.println("--------"); + //while循环实现 + int j = 1; + while(j<=5) { + System.out.println("HelloWorld"); + j++; + } + } + } + + //需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度? + public class S1 { + public static void main(String[] args) { + int ci = 0; //定义计数器,计算折叠几次,初始值为0 + double zhi = 0.1; //定义纸张厚度 + int shan = 8844430; //定义珠穆朗玛峰高度 + while (shan >= zhi){ + zhi *= 2; + ci++; + } + System.out.println("纸张需要折" + ci + "次才能和珠穆朗玛峰一样高"); + } + } + ``` + +## do...while循环 + +- 格式 + + ```java + 初始化语句; + do { + 循环语句体; + 条件控制语句; + }while(条件判断语句); + ``` + +- 案例 + + ```java + //需求:在控制台输出5次"HelloWorld" + public class DoWhileDemo { + public static void main(String[] args) { + //for循环实现 + for(int i=1; i<=5; i++) { + System.out.println("HelloWorld"); + } + System.out.println("--------"); + //do...while循环实现 + int j = 1; + do { + System.out.println("HelloWorld"); + j++; + }while(j<=5); + } + } + ``` + + -- Gitee From de273221d52381229e41feb06d2b2afa01d20832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=94=A1=E6=B3=BD=E9=92=A6?= <2978477807@qq.com> Date: Fri, 9 Dec 2022 12:29:07 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E9=9A=8F=E6=9C=BA=E6=95=B0=E5=92=8C?= =?UTF-8?q?=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\344\270\216\346\225\260\347\273\204.md" | 269 ++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 "08 \350\224\241\346\263\275\351\222\246/20221208\345\205\263\344\272\216\351\232\217\346\234\272\346\225\260\344\270\216\346\225\260\347\273\204.md" diff --git "a/08 \350\224\241\346\263\275\351\222\246/20221208\345\205\263\344\272\216\351\232\217\346\234\272\346\225\260\344\270\216\346\225\260\347\273\204.md" "b/08 \350\224\241\346\263\275\351\222\246/20221208\345\205\263\344\272\216\351\232\217\346\234\272\346\225\260\344\270\216\346\225\260\347\273\204.md" new file mode 100644 index 0000000..9e99f48 --- /dev/null +++ "b/08 \350\224\241\346\263\275\351\222\246/20221208\345\205\263\344\272\216\351\232\217\346\234\272\346\225\260\344\270\216\346\225\260\347\273\204.md" @@ -0,0 +1,269 @@ +## 1.跳转循环 + +- 跳转控制语句(break):跳出循环,结束循环 + +- 跳转控制语句(continue):跳过本次循环,继续下次循环 + +- 示例 + + ```java + public class S1 { + /* + break : 终止循环体内容的执行 + 注意:使用是基于条件控制的 + break语句只能在循环和switch中进行使用. + 需求: 模拟20岁工作到80岁, 60岁退休. + */ + public static void main(String[] args){ + for(int i = 20; i <= 80; i++){ + if(i == 60){ + break; // 结束整个循环 + } + System.out.println(i + "岁正在上班"); + } + } + } + + + public class S1 { + /* + continue : 跳过某次循环体内容的执行 + 注意:使用是基于条件控制, 在循环内部使用. + 需求: 模拟电梯上行的过程 1-24层, 4层不停. + */ + public static void main(String[] args){ + for(int i = 1; i <= 24; i++){ + if(i == 4){ + continue; + } + System.out.println(i + "层到了~"); + } + } + } + ``` + +## 2.随机数 + +- 使用步骤 + + 1. 导入Random包:import java.util.Random; + + 2. 创建对象:Random r = new Random(); + + 3. 产生随机数:int num = r.nextInt(10);【10代表的时随机数的范围为0到9,即不包括所输入的数】 + + 4. 示例 + + ```java + import java.util.Random; + public class S1 { + /* + Random : 产生随机数 + 1. 导包 : import java.util.Random; + 导包的动作必须出现在类定义的上面 + 2. 创建对象 : Random r = new Random(); + 上面这个格式里面,r 是变量名,可以变,其他的都不允许变 + 3. 获取随机数 : int number = r.nextInt(10); //获取数据的范围:[0,10) 包 + 括0,不包括10 + 上面这个格式里面,number是变量名,可以变,数字10可以变。其他的都不允许变 + 需求: 产生随机数1-10之间的 + */ + public static void main(String[] args){ + // 2. 创建对象 + Random r = new Random(); + for(int i = 1; i <= 10; i++){ + // 3. 获取随机数 + int num = r.nextInt(10) + 1; // 1-10 + System.out.println(num); + } + } + } + ``` + +## 3.数组 + +- 格式 + + ```java + //第一种格式:数据类型 [] 数组名 + //示例 + int[] arr; + double[] arr; + char[] arr; + + //第二种格式:数据类型 数组名 [] + //示例 + int arr[]; + double arr[]; + char arr[]; + ``` + +- 数组的动态初始化 + + 1. 定义:数组动态初始化就是只给定数组的长度,由系统给出默认初始化值 + + 2. 格式 + + ```java + //数据类型[] 数组名 = new 数据类型[数组长度]; + int[] arr = new int[3]; + //等号左边{int:数组的数据类型、[]:代表这是一个数组、arr:代表数组的名称} + //等号右边{new:为数组开辟内存空间、int:数组的数据类型、[]:代表这是一个数组、3:代表数组的长度} + ``` + + 3. 示例 + + ```java + package com.itheima.array; + public class S1 { + /* + 数组的动态初始化: + 在初始化的时候, 需要手动指定数组的长度, 系统会为数组容器分配初始值. + 动态初始化格式: + 数据类型[] 数组名 = new 数据类型[数组的长度]; + 注意: + 打印数组变量的时候, 会打印出数组的内存地址 + [I@10f87f48 : + @ : 分隔符 + [ : 当前的空间是一个数组类型 + I : 当前数组容器中所存储的数据类型 + 10f87f48 : 十六进制内存地址 + 0 1 2 3 4 5 6 7 8 9 a b c d e f + */ + public static void main(String[] args) { + // 数据类型[] 数组名 = new 数据类型[数组的长度]; + // 通过new关键字创建了一个int类型的数组容器, 该容器可以存储5个int类型的整数, 该容器被arr数组变量所记录 + int[] arr = new int[5]; + // [I@10f87f48 + System.out.println(arr); + byte[] bArr = new byte[3]; + // [B@b4c966a + System.out.println(bArr); + } + } + + ``` + +- 数组元素访问 + + 1. 索引:每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。 + + ```java + //格式 + 数组名[索引]; + ``` + + 2. 示例 + + ```java + package com.itheima.array; + public class Demo3ArrayIndex { + /* + 数组动态初始化: + 初始化的时候, 手动指定数组长度, 系统会为数组容器分配初始值. + 数组的元素访问格式: + 数组名[索引] + 索引: 数组中数据的编号方式, 编号从0开始 + 作用: 访问数组容器中的空间位置 + 注意: + 数组在创建完毕后, 即使没有赋值, 也可以取出, 但取出的元素都是默认初始化值. + */ + public static void main(String[] args) { + int[] arr = new int[3]; // 0 1 2 + System.out.println(arr); // 数组的内存地址 [I@10f87f48 + // 数组名[索引] 访问数组容器中的空间位置 + System.out.println(arr[0]); // 0 系统自动分配的默认初始化值 + System.out.println(arr[1]); + System.out.println(arr[2]); + System.out.println("--------------"); + // 数组名[索引] + arr[0] = 11; + arr[1] = 22; + arr[2] = 33; + System.out.println(arr[0]); + System.out.println(arr[1]); + System.out.println(arr[2]); + } + } + ``` + +## 作业 + +1. 猜大小 + + ```java + import java.util.Random; + import java.util.Scanner; + public class 猜大小 { + public static void main(String[] args) { + Random ran = new Random(); + Scanner sc = new Scanner(System.in); + Scanner tb = new Scanner(System.in); + int rnum =ran.nextInt(90)+10; + int cishu = 0; + while(true){ + System.out.println("请输入您所猜的数:"); + int snum = sc.nextInt(); + if (snum > rnum){ + System.out.println("猜大了!"); + cishu++; + }else if (snum < rnum){ + System.out.println("猜小了!"); + cishu++; + }else{ + System.out.println("恭喜您,猜对了!"); + cishu++; + break; + } + if (cishu == 3){ + System.out.println("您已经猜错三次,请问是否投币继续(是Y/否N)"); + char sftb = tb.next().charAt(0); + if (sftb == 89) { + System.out.println("请继续!"); + }else if(sftb == 78){ + System.out.println("感谢您的参与,欢迎下次再来!"); + break; + }else{ + System.out.println("请下次再来!"); + break; + } + } + } + System.out.println("您一共猜了" + cishu + "次"); + } + } + ``` + +2. 数组 + + ```java + import java.util.Arrays; + import java.util.Random; + public class x { + public static void main(String[] args) { + Random r = new Random(); + int[] arr = new int[10]; + for (int i = 0;imax){ + max = arr[i]; + } + } + System.out.println("最大值为:"+max); + } + } + ``` + + \ No newline at end of file -- Gitee From c0e45d94ad52dd5bc612d475cb2112854aceeca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=94=A1=E6=B3=BD=E9=92=A6?= <2978477807@qq.com> Date: Mon, 12 Dec 2022 11:08:06 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\347\273\204\351\201\215\345\216\206.md" | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 "08 \350\224\241\346\263\275\351\222\246/20221209\345\205\263\344\272\216\346\225\260\347\273\204\351\201\215\345\216\206.md" diff --git "a/08 \350\224\241\346\263\275\351\222\246/20221209\345\205\263\344\272\216\346\225\260\347\273\204\351\201\215\345\216\206.md" "b/08 \350\224\241\346\263\275\351\222\246/20221209\345\205\263\344\272\216\346\225\260\347\273\204\351\201\215\345\216\206.md" new file mode 100644 index 0000000..2765ef8 --- /dev/null +++ "b/08 \350\224\241\346\263\275\351\222\246/20221209\345\205\263\344\272\216\346\225\260\347\273\204\351\201\215\345\216\206.md" @@ -0,0 +1,182 @@ +## 数组操作两个常见问题 + +1. ### 索引越界异常 + + - 出现原因 + + ```java + //数组的长度为3,索引范围为0-2,没有索引为3的值,因此程序运行后会抛出ArrayIndexOutOfBoundsException 数组越界异常 + //此时将错误的索引改到正确的索引范围即可解决 + public class xx { + public static void main(String[] args) { + int[] arr = new int[3]; + System.out.println(arr[3]); + } + } + ``` + +2. ### 空指针异常 + + - 出现原因 + + ```java + //arr = null 这行代码意味着变量arr将不会保存数组的内存地址,即不允许再操作数组,因此运行时会抛出 NullPointerException 空指针异常 + //此时给数组一个真正的堆存空间引用即可 + public class xx { + public static void main(String[] args) { + int[] arr = new int[3]; + //把null赋值给数组 + arr = null; + System.out.println(arr[0]); + } + } + ``` + +## 数组遍历 + +- 定义:就是将数组中的每个元素分别获取出来,遍历时数组操作中的基石 + +- 示例 + + ```java + //每一个都输出一边,但如果数组元素非常多用这种写法就会很麻烦 + public class x01 { + public static void main(String[] args) { + int[] arr = { 1, 2, 3, 4, 5 }; + System.out.println(arr[0]); + System.out.println(arr[1]); + System.out.println(arr[2]); + System.out.println(arr[3]); + System.out.println(arr[4]); + } + } + //循环写法,数组的索引时0到lenght-1,可以作为循环的条件出现 + public class x01 { + public static void main(String[] args) { + //定义数组 + int[] arr = {11, 22, 33, 44, 55}; + + //使用通用的遍历格式 + for(int x=0; x max){ + max = arr[i]; + } + } + System.out.println(); + System.out.println("数组中最大数为:" + max); + /* + //已知数组获取最大值 + int[] arr = {12,45,98,73,60}; + int max = arr[0]; + for (int a = 0;a < arr.length;a++){ + System.out.print(arr[a] + " "); + } + for(int i = 1;i < arr.length;i++){ + if (arr[i] > max){ + max = arr[i]; + } + } + System.out.println(); + System.out.println("最大值为" + max); + */ + } + } + + //需求:键盘录入5个整数,存储到数组中,并对数组求和 + import java.util.Scanner; + public class 求数组和 { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int sum = 0; + int[] arr = new int[5]; + for (int i = 0;i < arr.length; i++){ + System.out.println("请输入第" + (i+1) + "个整数:"); + arr[i] = sc.nextInt(); + } + for (int i = 0; i < arr.length;i++){ + sum += arr[i]; + } + System.out.println("所有数的和为:" + sum); + } + } + + //需求:已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索 引,并在控制台输出找到的索引值。 + import java.util.Scanner; + public class 查找索引 { + public static void main(String[] args) { + int[] arr = {19,28,37,46,50}; + System.out.print("数组中的数有:"); + for (int a = 0;a < arr.length;a++){ + System.out.print(arr[a] + " "); + } + Scanner sc = new Scanner(System.in); + System.out.println(); + System.out.println("请输入你要查找的元素:"); + int num = sc.nextInt(); + int index = -1; + for (int i = 0;i < arr.length;i++){ + if (num == arr[i]){ + index = i; + break; + } + } + System.out.println(index); + } + } + + //需求:在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。选手的最后得分为:去掉一个最高分和一个最低分后的4个评委平均值 (不考虑小数部分)。 + import java.util.Scanner; + public class 平均分 { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int sum = 0; + int[] arr = new int[6]; + for (int i = 0;i < arr.length; i++){ + System.out.println("请输入第" + (i+1) + "位评委的打分:"); + arr[i] = sc.nextInt(); + } + for (int i = 0;i < arr.length;i++){ + sum += arr[i]; + } + int max = arr[0]; + int min = arr[0]; + for (int i = 1;i < arr.length;i++){ + if (max < arr[i]){ + max = arr[i]; + } + if (min > arr[i]){ + min = arr[i]; + } + } + System.out.println("该选手平均分为:" + (sum - max - min)/4.0 + "分"); + } + } + ``` + + \ No newline at end of file -- Gitee