目录
一、循环控制语句
1.特殊关键字
①break:只能用于switch语句和循环语句中
②continue:只能用于循环语句中
③return:结束一个方法
2.练习
①输出一百以内素数
3.家庭收支记账
①介绍Utility工具类
②创建主体类程序
③完整代码
二、idea的使用
1.概念
2.编写
①创建类
三、数组
1、概念
2.创建数组
①声明数组变量
②.创建数组对象
③将数据存入数组
④从数组中读取数据
⑤遍历数组
⑥数组必须创建对象再访问元素
⑦数组中元素默认值
3.内存分析
4.练习
四、多维数组
1.概念
2.多维数组底层内存结构
3.语法层面
①创建二维数组格式一:动态初始化——创建数组对象时就指定了两个维度的数组长度
②创建二维数组格式二:动态初始化——仅指定第一个维度的数组长度
③创建二维数组格式三:静态初始化——在创建对象时将数据填充
④创建二维数组格式四:声明变量时,两层[]没在一起,不建议使用
4.访问二维数组元素
5.遍历二维数组元素
6.练习
一、循环控制语句
for、while、do…while均可以作为外循环
1.特殊关键字 ①break:只能用于switch语句和循环语句中
结束本层循环
例:
public class Break{ public static void main(String[] args){ for(int k = 0;k <=9;k ++){ for(int i = 0;i <= 9;i ++){ if(i == 6){ break; } System.out.print("k=" + k + "i=" + i); } System.out.println("k=" + k); } }}
结束for(int i = 0;i<=9;i ++)的循环,for(int k = 0;k <=9;k ++)正常进行
通过标号来结束外层循环(不推荐使用,可读性差)
public class Break{ public static void main(String[] args){ a:for(int k = 0;k <=9;k ++){ b:for(int i = 0;i <= 9;i ++){ if(i == 6){ break; } if(k == 6){ break a; } System.out.print("k=" + k + "i=" + i); } System.out.println("k=" + k); } }}
②continue:只能用于循环语句中
提前结束本次循环,进入下一次循环
例
public class Continue{ public static void main(String[] args){ for(int i = 0;i <= 9;i ++){System.out.println(i);System.out.println("**");if(i == 6){//提前结束本次循环,进入下一次循环continue;}System.out.println("***");} }}
通过标号来结束外层循环(不推荐使用,可读性差)
public class Continue{ public static void main(String[] args){ a:for(int i = 0;i <= 9;i ++){b:for(int j = 0;j <= 9;j ++){if(i == 6){continue a;}System.out.println(i + "," + j);}} }}
③return:结束一个方法
直接结束整个方法,不论return处于多少层循环之中
本质上不是控制循环的语句,,是用来结束一个函数(方法)的,当函数结束时,循环也随之结束
2.练习 ①输出一百以内素数
public class SuShu{public static void main(String[] args){//外层循环,列出2~100所有数字for(int i = 2;i <= 100;i ++){//声明一个变量,用来保存当前数字是否为素数//默认为trueboolean primeFlag = true;//内层循环验证i变量中保存的这个数是不是素数//验证方式:对i从【2到i/2】的所有数取模//如果能够整除,那么这个数不是素数for(int j = 2;j <= i/2;j ++){if(i % j == 0){//i能被整除,不是素数。将PrimeFlag设为falseprimeFlag = false;//i只要能被任何一个j整除,则i就不是素数,所以后边就不用再试break;}}if(primeFlag){System.out.println("i=" + i);}}}}
3.家庭收支记账 ①介绍Utility工具类
这个类使用时,和主体程序目录放在一起即可
Utility工具类和FamilyAccount类要放在一起
②创建主体类程序
public class FamilyAccount{public static void main(String[] args){}}
③完整代码
public class FamilyAccount{public static void main(String[] args){//初始化:用户记账金额初始值设为10000元int balance = 10000;//初始化:显示收支明细时使用表头信息String table = "收支t账户金额t收支金额t说 明n";//使操作循换//使用Ctrl+c强制结束进程while(true){//界面:标题System.out.println("------------家庭收支记账软件------------");//界面:菜单选项System.out.println("1 收支明细");System.out.println("2 登记收入");System.out.println("3 登记支出");System.out.println("4 退t出");//界面:提示用户输入菜单项的序号System.out.print("请输入菜单项的序号(1-4):");//读取:用户输入的菜单项序号char menuSelection = Utility.readMenuSelection();System.out.println(menuSelection);//分支结构:根据用户输入的数字,执行对应操作switch(menuSelection){case '1':System.out.println(table);break;case '2'://界面:提示用户输入收入金额System.out.println("请输入收入金额:");int income = Utility.readNumber();//界面:提示用户输入收入说明System.out.println("请输入收入说明");String incomeDescription = Utility.readString();//系统内部运算:将收入金额累加到总余额中balance = balance + income;//系统内部运算:将新的收入明细信息附加到表格中table = table + "收入t" + balance + "tt" + income + "tt" + incomeDescription + "n";//提示已保存System.out.println(incomeDescription + "已保存收入登记信息");break;case '3'://界面:提示用户输入支出金额System.out.println("请输入支出金额:");int outcome = Utility.readNumber();//界面:提示用户输入支出说明System.out.println("请输入支出说明");String outcomeDescription = Utility.readString();//系统内部运算:将收入金额累减到总余额中balance = balance - outcome;//系统内部运算:将新的支出明细信息附加到表格中table = table + "支出t" + balance + "tt" + outcome + "tt" + outcomeDescription + "n";//提示已保存System.out.println(outcomeDescription + "已保存收入登记信息");break;case '4':System.out.print("确认是否退出Y|N:");char confirmWord = Utility.readConfirmSelection();if(confirmWord == 'Y'){return;}break;}}}}
二、idea的使用 1.概念
project:工程
module:模块
模块包含在工程中
2.编写
创建工程→创建module→创建类
①创建类
最好把类都放在包中
取名格式:
公司或组织域名的倒序.项目名称.模块名称.具体包名.类名
com.atguigu.mall.product.service.ProductService
例:com.atguigu.iavase.idea.HotKeyTest
三、数组 1、概念
一组相同类型数据的容器
相同类型:Java语言要求存入数组的数据类型必须一致
容器:用来存放数据
一组容器中可以存放多个数据
长度一旦确定不能再修改
2.创建数组 ①声明数组变量
int[] ageArray;String[] nameArray;double salaryArray [];
[]也可以放在变量名的后面,但是建议放在类型的后面
[]中不能指定数组长度
②.创建数组对象
①动态
ageArray = new int[5];
②静态
[]中不能规定长度
nameArray = new String[]{"foo","bar","biz"};
③将数据存入数组
ageArray[0] = 10;ageArray[1] = 11;ageArray[2] = 12;ageArray[3] = 13;ageArray[4] = 14;nameArray[0] = "aaa";nameArray[1] = "bbb";nameArray[2] = "ccc";
④从数组中读取数据
利用System.out.println();
⑤遍历数组
Array.length是数组的长度
for(int i = 0;i <= Array.length;i ++){ int age = ageArray[i]; System.out.println("age" = age);}
⑥数组必须创建对象再访问元素 ⑦数组中元素默认值 数组元素类型 元素初始默认值 byteshort0int0long0Lfloat0.0Fdouble0.0char0或:'u0000'(表现为空)booleanfalse引用数据类型null3.内存分析
3.内存分析
①基本数据类型保存在栈内存中
int a = 10;
②引用数据保存在堆内存中,形式为地址
创建对象
Scanner scanner = new Scanner(System.in);
创建数组对象
int[] ageArray;ageArray = new int[5];
将数据写入数组
ageArray[0] = 8;
多声明一个数组变量
int[] otherArray = ageArray;
通过另一个变量访问数组元素
数组变量指向新数组对象
otherArray = new int[2];
给新数组元素赋值
otherArray[1] = 33;
4.练习
分析以下需求,并用代码实现:
(1)在编程竞赛中,有10位评委为参赛的选手打分,分数分别为:5,4,6,8,9,0,1,2,7,3
(2)求选手的最后得分(去掉一个最高分和一个最低分后其余8位评委打分的平均值)
int[] scoreArray = {5,4,6,8,9,0,1,2,7,3}; // 声明两个变量,用于保存打分数据中的最大值和最小值 // maxScore和minScore的初始值应该是数组中的某一个元素 // 以minScore为例,如果初始值为0,原始数组中所有数值都比0大,则无法正确找到真正的最小值 int maxScore = scoreArray[0]; int minScore = scoreArray[0]; // 遍历数组,获取每一个具体的分数 for (int i = 0; i < scoreArray.length; i++) { // 获取每一个数组元素 int score = scoreArray[i]; // 拿当前遍历得到的元素和maxScore进行比较 if (score > maxScore) { // 如果当前元素大于maxScore,则将当前元素赋值给maxScore maxScore = score; } // 拿当前遍历得到的元素和minScore进行比较 if (score < minScore) { // 如果当前元素小于minScore,则将当前元素赋值给minScore minScore = score; } } System.out.println("minScore = " + minScore); System.out.println("maxScore = " + maxScore); // 声明变量用来保存累加的结果 int sum = 0; // 为了求平均值,需要再遍历一次 for (int i = 0; i < scoreArray.length; i++) { int score = scoreArray[i]; sum = sum + score; } // 根据评分规则,最高分和最低分分别只去掉一个,所以在上面全部分数累加结果中把最高分和最低分减去即可 // 累加结果除以8得到平均值 double average = (sum - maxScore - minScore) / 8.0; System.out.println("average = " + average);
从键盘读入学生成绩,找出最高分,并输出学生成绩等级。 成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’ 成绩>=最高分-30 等级为’C’
其余 等级为’D’
// 1.创建Scanner对象Scanner scanner = new Scanner(System.in);// 2.读取用户输入的学生人数System.out.print("请输入学生人数:");int studentCount = scanner.nextInt();// 3.根据用户输入的学生人数创建数组对象(以学生人数作为数组长度)int[] scoreArray = new int[studentCount];// 4.将用户输入的学生成绩保存到数组中for (int i = 0; i < studentCount; i++) { // 5.读取用户输入 System.out.print("请输入第" + (i + 1) + "位学生成绩:"); int score = scanner.nextInt(); // 6.将学生成绩存入数组下标对应的位置 scoreArray[i] = score;}// 二、查找已输入数据中的最大值// 1.声明一个变量用来存储最大值// 为什么最大值变量的初始值设置为scoreArray[0]?// 假设成绩是:-10,-20,-30// 假设maxScore是:0// 最大值是:0int maxScore = scoreArray[0];// 2.遍历成绩数组for (int i = 0; i < scoreArray.length; i++) { // 3.获取当前成绩数据 int score = scoreArray[i]; // 4.检查当前成绩是否大于maxScore if (score > maxScore) { // 5.如果当前成绩大于maxScore,就把maxScore设置为当前成绩 maxScore = score; }}System.out.println("maxScore = " + maxScore);// 三、按照等级打印学生成绩// 1.遍历学生成绩数组for (int i = 0; i < scoreArray.length; i++) { // 2.获取当前成绩数据 int score = scoreArray[i]; // 3.逐级判断当前成绩数据属于哪个等级 if (score > maxScore - 10) { System.out.println("第" + (i+1) + "位学生的成绩" + score + "是A级"); } else if (score > maxScore - 20) { System.out.println("第" + (i+1) + "位学生的成绩" + score + "是B级"); } else if (score > maxScore - 30) { System.out.println("第" + (i+1) + "位学生的成绩" + score + "是C级"); } else { System.out.println("第" + (i+1) + "位学生的成绩" + score + "是D级"); }}
四、多维数组 1.概念
一维数组:线
二维数组:面
三维数组:立体空间
2.多维数组底层内存结构
int[][] = new numberArr[3][2];numberArr[0] = new int[2];numberArr[0][0] = 5;
numberArr[0]指向另一个数组
3.语法层面 ①创建二维数组格式一:动态初始化——创建数组对象时就指定了两个维度的数组长度
int[][] arr2d01 = new int[3][2];arr2d01[0][0] = 100;arr2d01[0][1] = 101;arr2d01[1][0] = 102;arr2d01[1][1] = 103;arr2d01[2][0] = 104;arr2d01[2][1] = 105;
②创建二维数组格式二:动态初始化——仅指定第一个维度的数组长度
Java中多维数组不必都是规则矩阵形式
int[][] arr2d02 = new int[3][];arr2d02[0] = new int[]{3, 5, 7};arr2d02[1] = new int[]{14, 21, 66, 89};arr2d02[2] = new int[]{90, 100};
③创建二维数组格式三:静态初始化——在创建对象时将数据填充
如果某个元素位置设置为null不会编译报错,但是访问这个位置时还是要先初始化
前面设置null的地方,需要初始化才可以访问:arr2d03[2] = new int[]{12,24};
int[][] arr2d03 = new int[][]{{1,2,3}, {4,5}, null, {6,7,8}};arr2d03[2] = new int[]{12,24};arr2d03[2][0] = 5;
④创建二维数组格式四:声明变量时,两层[]没在一起,不建议使用
int[] x[] = new int[][]{{1,2,3}, {4,5}, {6,7,8}};
4.访问二维数组元素
int[][] arr2d05 = new int[2][2];arr2d05[1][0] = 10;System.out.println("arr2d05[1][0] = " + arr2d05[1][0]);
5.遍历二维数组元素
int[][] arr2d06 = new int[][]{{0,1,2},{3,4,5},{6,7},{8}};for (int i = 0; i < arr2d06.length; i++) { int[] intArr = arr2d06[i]; for (int j = 0; j < intArr.length; j++) { int intValue = intArr[j]; System.out.println("intValue[" + i +"][" + j + "] = " + intValue); }}
6.练习
//1、创建二维数组int[][] yanghuiArr = new int[10][];// 2.通过双层for循环给二维数组填充数据for (int i = 0; i < yanghuiArr.length; i++) { // 3.创建一维数组,对yanghuiArr下标i位置进行初始化 yanghuiArr[i] = new int[ i + 1 ]; // 4.遍历一维数组,填充数据 for (int j = 0; j <= i; j++) { // 5.一头(一维数组的下标0元素)一尾(一维数组的下标长度-1元素)固定就是1 // 一维数组中最后一个元素的下标正好就是现在外层循环变量:i if (j == 0 || j == i) { yanghuiArr[i][j] = 1; } else { // 6.非头尾的元素,由上一行中两个元素相加得到 // 第一个值的下标:[i-1][j-1] // 第二个值的下标:[i-1][j] yanghuiArr[i][j] = yanghuiArr[i-1][j-1] + yanghuiArr[i-1][j]; } }}// 7.遍历填充数据的二维数组for (int i = 0; i < yanghuiArr.length; i++) { int[] yanghuiValueArr = yanghuiArr[i]; for (int j = 0; j < yanghuiValueArr.length; j++) { System.out.print(yanghuiValueArr[j] + "t"); } System.out.println();}