Java笔记3

目录

一、循环控制语句

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 ++){
			
			//声明一个变量,用来保存当前数字是否为素数
			//默认为true
			boolean primeFlag = true;
			
			//内层循环验证i变量中保存的这个数是不是素数
			//验证方式:对i从【2到i/2】的所有数取模
			//如果能够整除,那么这个数不是素数
			for(int j = 2;j <= i/2;j ++){
				if(i % j == 0){
					//i能被整除,不是素数。将PrimeFlag设为false
					
					primeFlag = false;
					
					//i只要能被任何一个j整除,则i就不是素数,所以后边就不用再试
					break;
				}
			}
			if(primeFlag){
				System.out.println("i=" + i);
			}
		}
	}
}

3.家庭收支记账

①介绍Utility工具类

这个类使用时,和主体程序目录放在一起即可

调用方式方法作用
Utility.readMenuSelection()读取菜单序号:1、2、3、4
Untility.readNumber()读取金额数值
Utility.readString()读取文字
Utility.readConfirmSelection()读取确认是否退出Y/N
Utility.readKeyBoard(int limit)从键盘读取limit个字符

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 + "\t\t" + income + "\t\t" + 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 + "\t\t" + outcome + "\t\t" + 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);

}

⑥数组必须创建对象再访问元素

⑦数组中元素默认值

数组元素类型元素初始默认值
byte
short0
int0
long0L
float0.0F
double0.0
char0或:'\u0000'(表现为空)
booleanfalse
引用数据类型null

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
// 最大值是:0
int 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();
​
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值