需求:
分析:
实现:
package com.app.comprehensive12;
import java.util.Scanner;
/**
* 综合练习:卖飞机票
* 需求:
* 机票价格按照淡季和旺季、头等舱和经济舱收费;
* 输入机票原价、月份和头等舱或经济舱;
* 按照如下规则计算机票价格:
* 旺季(5-10月份)头等舱9折,经济舱8.5折;
* 淡季(11月到来年4月份)头等舱7折,经济舱6.5折。
*/
public class Test1 {
public static void main(String[] args) {
// 1、键盘录入机票原价、月份
Scanner sc = new Scanner(System.in);
System.out.println("请您输入机票原价:");
int ticketPrice = sc.nextInt();
System.out.println("请您输入月份:");
int month = sc.nextInt();
System.out.println("请您选择舱位:" +
"\n0.头等舱" +
"\n1.经济舱");
int seat = sc.nextInt();
// 2、先判断月份是旺季还是淡季
if (month >= 5 && month <= 10) {
// 旺季
// 3、最终判断是经济舱还是头等舱:
// 如果是头等舱,机票原价打9折;如果是经济舱,机票原价打8.5折
ticketPrice = getTicketPrice(ticketPrice, seat, 0.9, 0.85);
} else if ( (month >= 1 && month <= 4) || (month >= 11 && month <= 12) ){
// 淡季
// 3、最终判断是经济舱还是头等舱:
// 如果是头等舱,机票原价打7折;如果是经济舱,机票原价打6.5折
ticketPrice = getTicketPrice(ticketPrice, seat, 0.7, 0.65);
}else {
System.out.println("sorry!您输入的是非法月份!");
}
System.out.println("您成功购买了机票,共花费 " + ticketPrice + " 元。");
}
/**
* 抽取代码做成方法前要考虑的问题:
* 1.我要干嘛? 根据舱位和折扣来计算最终的机票价格
* 2.我干这件事,需要什么才能完成? 机票原价、舱位、头等舱的折扣、经济舱的折扣
* 3.方法的调用处是否需要继续使用这个结果? 需要
*/
/**
* 根据舱位计算出最终的机票价格
*
* @param ticketPrice 机票原价
* @param seat 舱位
* @param v1 头等舱的折扣
* @param v2 经济舱的折扣
* @return 返回最终的机票价格
*/
public static int getTicketPrice(int ticketPrice, int seat, double v1, double v2) {
// 3、再判断是经济舱还是头等舱:
if (seat == 0) {
// 头等舱
// 4、根据实际情况计算出价格
ticketPrice = (int) (ticketPrice * v1); // 强转成int类型
} else if (seat == 1) {
// 经济舱
ticketPrice = (int) (ticketPrice * v2);
} else {
System.out.println("sorry!没有这个舱位~");
}
return ticketPrice; // 返回最终的机票价格
}
}
请您输入机票原价:
1000
请您输入月份:
11
请您选择舱位:
0.头等舱
1.经济舱
0
您成功购买了机票,共花费 700 元。
Process finished with exit code 0
需求:
实现:
package com.app.comprehensive12;
import java.util.Scanner;
/**
* 综合练习:找质数
* 需求:
* 判断 101 ~ 200 之间有多少个素数(质数),并输出所有素数
*/
public class Test2 {
public static void main(String[] args) {
// 1、从键盘录入两个整数,分别表示范围的起始和结束
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入一个数作为范围的起始:");
int startNumber = sc.nextInt();
System.out.println("请您输入一个数作为范围的结束:");
int endNumber = sc.nextInt();
// 2、判断是否为正整数
if (startNumber > 0 && endNumber > 0) {
// 4、调用judgePrimeNumber方法,判断 startNumber 到 endNumber 这个范围之间有多少个质数,并这个范围内的所有质数
judgePrimeNumber(startNumber, endNumber);
// 5、判断完startNumber~endNumber这个范围内的质数个数了,跳出死循环
break;
} else {
System.out.println("sorry!您输入的不是正整数!");
}
}
}
/**
* 6、判断质数的实现方法
*
* @param startNumber 起始范围
* @param endNumber 结束范围
*/
public static void judgePrimeNumber(int startNumber, int endNumber) {
// a.定义count变量,用于统计质数的个数
int count = 0;
// b.定义外循环:遍历 startNumber ~ endNumber 这个范围,依次得到这个范围的每一个数
for (int i = startNumber; i <= endNumber; i++) {
// i: 依次表示循环中的每一个数
// (1) 标记思想:立一个flag,初始值为true(一开始就认为当前遍历这个数是质数)
boolean flag = true;
// (2) 定义内循环:遍历 2~i(遍历到的当前这个数) 这个范围,依次得到这个范围的每一个数
for (int j = 2; j < i; j++) {
// a.看看 i 是否能被 2~i 这个范围内的所有数整除
if (i % j == 0) {
// 能,则将flag值改为false(表示i不是质数)
flag = false;
// 跳出内循环,继续判断下一个数
break;
}
}
// c.内循环结束,判断flag
if (flag) {
// 如果还为true,说明当前这个数是质数
// (1) 判断i是否为1
if (i == 1) {
// a.为1,则提示:“数字1既不是质数,也不是合数”
System.out.println("数字"+ i +"既不是质数,也不是合数");
}else {
// b.不为1,则输出这个质数
System.out.println(i + "是质数~");
// c.开始统计质数的个数
count++;
}
}
}
// d.当外循环结束了,说明startNumber~endNumber这个范围已经将所有质数都统计完了,输出最终统计结果!
System.out.println(startNumber + "~" + endNumber + "这个范围内总共有" + count + "个质数!");
}
}
请您输入一个数作为范围的起始:
1
请您输入一个数作为范围的结束:
10
数字1既不是质数,也不是合数
2是质数~
3是质数~
5是质数~
7是质数~
1~10这个范围内总共有4个质数!
Process finished with exit code 0
请您输入一个数作为范围的起始:
-12
请您输入一个数作为范围的结束:
100
sorry!您输入的不是正整数!
请您输入一个数作为范围的起始:
101
请您输入一个数作为范围的结束:
200
101是质数~
103是质数~
107是质数~
109是质数~
113是质数~
127是质数~
131是质数~
137是质数~
139是质数~
149是质数~
151是质数~
157是质数~
163是质数~
167是质数~
173是质数~
179是质数~
181是质数~
191是质数~
193是质数~
197是质数~
199是质数~
101~200这个范围内总共有21个质数!
Process finished with exit code 0
需求:
分析:
实现:
package com.app.comprehensive12;
import java.util.Random;
/**
* 综合练习:开发验证码
* 需求:定义方法实现随机生成一个5位的验证码
* 验证码格式:
* 1、长度为5
* 2、前四位是大写或者小写字母
* 3、最后一位是数字
*/
public class Test3 {
public static void main(String[] args) {
// 调用生成验证码的方法,接收返回结果
String code = createVerification();
System.out.println("验证码:" + code);
}
public static String createVerification() {
// 1、大写字母和小写字母都放到数组中
// 定义一个长度为52的char类型的数组,用于存储26位小写字母和26位大写字母
char[] chs = new char[52];
// 定义for循环遍历数组,依次将大写字母和小写字母存储到数组中
for (int i = 0; i < chs.length; i++) {
// i: 0 1 2 3 4...51
// 判断i是否小于等于25
if (i <= 25) {
// 注意:此时只有当i=0~25时,才可进入该分支
// i小于等于25,此时开始添加小写字母存储到数组中
// ASCII码表
// 97 98 99 100...122: 这些数字代表小写字母: a~z
// 因此,将这些数字强转成char类型之后,其实就是小写字母: a~z
// 97 + i: 当i=0时,97+i=97;当i=1时,97+i=98...97+i=122
chs[i] = (char)(97 + i);
}else {
// 注意:此时只有当i>25时,才可进入该分支
// i大于25,此时开始添加大写字母存储到数组中
// ASCII码表
// 65 66 67 68...90: 这些数字代表大写字母: A~Z
// 因此,将这些数字强转成char类型之后,其实就是大写字母: A~Z
// 65 + i - 26: 当i=26时,65+i-26=65;当i=27时,65+i-26=66...65+i-26=90
chs[i] = (char)(65 + i - 26);
}
}
// 定义一个字符串变量,用于记录最终5位验证码:4个字母+1个数字
String code = "";
// 2、随机抽取4个字母
// 创建随机数对象,用于生成随机数、随机索引
Random rd = new Random();
for (int i = 0; i < 4; i++) {
// i: 0 1 2 3
// 随机生成一个索引
int randomIndex = rd.nextInt(chs.length);
// 利用随机生成的索引,获取对应索引位置的元素,并记录到code变量中
code += chs[randomIndex]; // 等价于 code = code + chs[randomIndex]
}
// 3、随机抽取2个数字:0~9
// 随机生成一个数字
int randomNumber = rd.nextInt(10);
// 将随机生成的数字,记录到code变量中
code += randomNumber;
// 4、返回开发好的5位验证码
return code;
}
}
验证码:Lqke4
Process finished with exit code 0
验证码:LvqT8
Process finished with exit code 0
需求:
分析:
实现:
package com.app.comprehensive12;
import java.util.Arrays;
/**
* 综合练习:数组元素的复制
* 需求:
* 将一个数组中的元素复制到另一个新数组中
*/
public class Test4 {
public static void main(String[] args) {
// 定义一个原数组,存储一批数据
int[] arr = {1, 33, 22, 5, 9};
// 遍历数组原数组的每一个元素
System.out.println("原数组:" + Arrays.toString(arr));
// 调用复制数组的方法,接收返回的新数组
int[] newArr = copyArray(arr);
// 遍历输出新数组的每一个元素
System.out.println("新数组:" + Arrays.toString(newArr));
}
/**
* 定义拷贝数组的方法
* @param arr 接收一个数组
* @return 返回拷贝后的数组
*/
public static int[] copyArray(int[] arr) {
// 定义一个新数组,长度和原数组是一样的
int[] newArr = new int[arr.length];
// 遍历原数组,依次得到原数组中的每一个元素
for (int i = 0; i < arr.length; i++) {
// 将原数组中的每一个元素赋值给新数组
newArr[i] = arr[i];
}
// 当循环结束,拷贝完成,返回新数组
return newArr;
}
}
原数组:[1, 33, 22, 5, 9]
新数组:[1, 33, 22, 5, 9]
Process finished with exit code 0
需求:
分析:
实现:
package com.app.comprehensive12;
import java.util.Scanner;
/**
* 综合练习:评委打分
* 需求:
* 在唱歌比赛中,有6名评分给选手打分,分数范围是[0~100]之间的整数。
* 选手的最后得分为:去掉最高分、最低分的4个评委的平均分。
* 请完成上述过程并计算出选手的得分
*/
public class Test5 {
public static void main(String[] args) {
// 1、调用获取6位评委打分后的数组(0~100)
int[] scoreArr = getScoreArr();
System.out.print("\n6名评委的打分为:");
for (int score : scoreArr) {
System.out.print(score + " ");
}
// 2、求出数组中的最高分
int maxScore = getMaxScore(scoreArr);
System.out.println("\n最高分:" + maxScore);
// 3、求出数组中的最低分
int minScore = getMinScore(scoreArr);
System.out.println("最低分:" + minScore);
// 4、求出数组中所有分数的和
int sumScore = getSumScore(scoreArr);
System.out.println("总分:" + sumScore);
// 5、计算平均分:(总分 - 最高分 - 最低分) / 4
int averageScore = (sumScore - maxScore - minScore) / (scoreArr.length - 2);
System.out.println("这位选手的最终得分是" + averageScore + "分!恭喜!~^_^~");
}
/**
* 求出数组中所有分数的和
* @param scoreArr 接收一个数组
* @return 返回分数总和
*/
public static int getSumScore(int[] scoreArr) {
// 1、定义sum变量,用于记录分数总和
int sum = 0;
// 2、遍历数组,依次得到每一个分数
for (int i = 0; i < scoreArr.length; i++) {
// 每遍历到一个分数,进行累加
sum += scoreArr[i];
}
// 3、遍历结束,说明累加完成,返回总分
return sum;
}
/**
* 求出数组中的最低分
* @param scoreArr 接收一个数组
* @return 将最低分返回
*/
public static int getMinScore(int[] scoreArr) {
// 1、将数组中的首元素设置为最低分,用于与其他元素作比较
int min = scoreArr[0];
// 2、遍历数组,依次得到每一个分数
for (int i = 0; i < scoreArr.length; i++) {
// 判断当前遍历到的分数 是否小于 首元素
if (scoreArr[i] < min) {
// 小于,则替换min的值
min = scoreArr[i];
}
}
// 3、循环结束,说明比完了,此时min里的值就是最低分,返回最低分
return min;
}
/**
* 求出数组中的最高分
* @param scoreArr 接收一个数组
* @return 将最高分返回
*/
public static int getMaxScore(int[] scoreArr) {
// 1、将数组中的首元素设置为最大值,用于与其他元素作比较
int max = scoreArr[0];
// 2、遍历数组,依次得到每一个分数
for (int i = 0; i < scoreArr.length; i++) {
// 判断当前遍历到的分数 是否大于 首元素
if (scoreArr[i] > max) {
// 大于,则替换max的值
max = scoreArr[i];
}
}
// 3、循环结束,说明比完了,此时max里的值就是最高分,返回最高分
return max;
}
/**
* 获取6位评委打分后的数组
* @return 返回存储好6位评分打分的数组
*/
public static int[] getScoreArr() {
// 1、定义一个数组,用于存储6位评委的打分
int[] scoreArr = new int[6];
// 2、创建键盘录入对象,用于评委打分
Scanner sc = new Scanner(System.in);
// 3、6名评委开始打分
for (int i = 0; i < scoreArr.length;) {
System.out.println("请第" + (i+1) +"位评委给选手打分:");
int score = sc.nextInt();
// 判断打分的范围:0~100
if (score >= 0 && score <= 100) {
// 打分在规定范围内,将此分数存储到数组中
scoreArr[i] = score;
// i++: 让下一位评委进行打分
i++;
}else {
System.out.println("sorry!您的打分已超出规定范围0~100,请重新打分!");
}
}
// 4、循环结束,6名评委已全部完成打分,返回数组
return scoreArr;
}
}
请第1位评委给选手打分:
-12
sorry!您的打分已超出规定范围0~100,请重新打分!
请第1位评委给选手打分:
100
请第2位评委给选手打分:
99
请第3位评委给选手打分:
89
请第4位评委给选手打分:
1234
sorry!您的打分已超出规定范围0~100,请重新打分!
请第4位评委给选手打分:
66
请第5位评委给选手打分:
77
请第6位评委给选手打分:
88
6名评委的打分为:100 99 89 66 77 88
最高分:100
最低分:66
总分:519
这位选手的最终得分是88分!恭喜!~^_^~
Process finished with exit code 0
需求:
某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
规则如下:
先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。

实现:
package com.app.comprehensive12;
/**
* 综合练习:数字加密
* 需求:
* a.某系统的数字密码(大于0),比如1983,采用加密方式进行传输
*
* 加密规则如下:
* a.先得到每位数,每位数都加5
* b.每位数再对10求余
* c.最后将所有数字反转,得到一串新数
*/
public class Test6 {
public static void main(String[] args) {
int password = 1983; // 定义某系统的密码
System.out.println("加密前的密码:" + password);
// 1、调用密码加密的方法,传入一串整数密码,并接收返回的新密码(加密后)
int encryptPassword = getEncryptPassword(password);
if (encryptPassword == -1) {
System.out.println("sorry!系统密码必须大于0~");
}else {
System.out.println("加密后的密码:" + encryptPassword);
}
}
/**
* 2、密码加密
*
* @param password 接收一个系统密码
* @return 返回加密后的密码
*/
public static int getEncryptPassword(int password) {
// a.如果系统密码小于等于0,则返回-1
if (password <= 0) {
return -1;
}
// (1) 计算密码的个数,用作于存储每位密码的数组的长度
// 定义计数变量,用于统计密码的个数
int count = 0;
// 用一个临时变量存储原密码,方便后续使用
int tempPassword = password;
// 使用while循环计算密码的个数
while (password != 0) {
// 假如密码:1983,循环不断除以10
password = password / 10;
// 每除以10一次,就统计次数
count++;
}
// while循环结束,密码个数统计完成!
// (2) 定义一个数组,用于将密码中的每位数存储到数组中,长度就是密码的个数
int[] arr = new int[count];
// (3) 将密码中的每位数都存储到数组中
// 定义一个索引,这个索引的位置是数组的最后一位: 表示从数组最后一个位置往回添加
int index = arr.length - 1;
while (tempPassword != 0) {
// a.先从密码的右边得到每一位数
int ge = tempPassword % 10;
// b.再去掉右边的那位数
tempPassword = tempPassword / 10;
// c.把获取到的每一位数添加到数组中
// 数组名[索引] = 每一位数;
arr[index] = ge;
// 每添加一位数,让索引位置往回移动一位
index--;
}
// while循环结束,说明密码的每位数都已成功添加到数组中了!
// (4) 密码加密
// 假如int[] arr: 1 9 8 3
// a.先得到密码的每一位数,都加5
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 5;
}
// 此时int[] arr: 6 14 13 8
// b.再将每一位数对10求余
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] % 10;
}
// 此时int[] arr: 6 4 3 8
// c.最后将所有数进行反转
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
// 开始不断交换位置:
// 先用临时变量将当前遍历到的数存储起来
int temp = arr[i];
// 将后一位的数 赋值给 前一位的数的位置
arr[i] = arr[j];
// 将前一位的数 赋值给 后一位的数的位置
arr[j] = temp;
}
// 循环结束,说明数组中所有的数已经完成了反转
// 此时int[] arr: 8 3 4 6
// d.将这些数从数组中拿出来,拼接成一串数字,返回给调用处
// 定义整数变量,用于拼接每一位反转后的每一位数字,得到最终加密的密码
int encryptPassword = 0;
for (int i = 0; i < arr.length; i++) {
// 不断拼接
encryptPassword = encryptPassword * 10 + arr[i];
}
// 循环结束,说明拼接完成,返回最终加密后的密码
return encryptPassword;
}
}
加密前的密码:1983
加密后的密码:8346
Process finished with exit code 0
需求:
实现:
package com.app.comprehensive12;
/**
* 综合练习:数字加密、解密
* 需求:
* a.某系统的数字密码(大于0),比如1983,采用加密方式进行传输
*
* 加密规则如下:
* a.先得到每位数,每位数都加5
* b.每位数再对10求余
* c.最后将所有数字反转,得到一串新数
*
* 解密规则就是将加密规则反过来:
* a.先将所有数字反转,得到一串新数
* b.如果数字是0~4之间,那就+10;如果数字是5~9之间,数字不变。(与加密规则不同的地方)
* c.最后将每位数字都减5
*/
public class Test6 {
public static void main(String[] args) {
int password = 1983; // 定义某系统的密码
System.out.println("加密前的密码:" + password);
// 1、调用密码加密的方法,传入一串整数密码,并接收返回的新密码(加密后)
int encryptPassword = getEncryptPassword(password);
if (encryptPassword == -1) {
System.out.println("sorry!系统密码必须大于0~");
}else {
System.out.println("加密后的密码:" + encryptPassword);
}
// 3、调用密码解密的方法,传入加密后的密码,并接收返回的新密码(解密后)
int decodePassword = getDecodePassword(encryptPassword);
if (decodePassword == -1) {
System.out.println("sorry!系统密码必须大于0~");
}else {
System.out.println("解密后的密码:" + decodePassword);
}
}
/**
* 4、密码解密
* @param encryptPassword 接收一个加密后的密码
* @return 返回解密后的密码
*/
public static int getDecodePassword(int encryptPassword) {
// a.如果系统密码小于等于0,则返回null
if (encryptPassword <= 0) {
return -1;
}
// (1) 计算密码的个数,用作于存储每位密码的数组的长度
// 定义计数变量,用于统计密码的个数
int count = 0;
// 用一个临时变量存储原密码,方便后续使用
int tempPassword = encryptPassword;
// 使用while循环计算密码的个数
while (encryptPassword != 0) {
// 假如密码:12345,循环不断除以10
encryptPassword = encryptPassword / 10;
// 每除以10一次,就统计次数
count++;
}
// while循环结束,密码个数统计完成!
// (2) 定义一个数组,用于将密码中的每位数存储到数组中,长度就是密码的个数
int[] arr = new int[count];
// (3) 将密码中的每位数都存储到数组中
// 定义一个索引,这个索引的位置是数组的最后一位: 表示从数组最后一个位置往回添加
int index = arr.length - 1;
while (tempPassword != 0) {
// a.先从密码的右边得到每一位数
int ge = tempPassword % 10;
// b.再去掉右边的那位数
tempPassword = tempPassword / 10;
// c.把获取到的每一位数添加到数组中
// 数组名[索引] = 每一位数;
arr[index] = ge;
// 每添加一位数,让索引位置往回移动一位
index--;
}
// while循环结束,说明密码的每位数都已成功添加到数组中了!
// (4) 密码解密
// 假如int[] arr: 8 3 4 6
// a.最后将所有数进行反转
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
// 开始不断交换位置:
// 先用临时变量将当前遍历到的数存储起来
int temp = arr[i];
// 将后一位的数 赋值给 前一位的数的位置
arr[i] = arr[j];
// 将前一位的数 赋值给 后一位的数的位置
arr[j] = temp;
}
// 循环结束,说明数组中所有的数已经完成了反转
// 此时int[] arr: 6 4 3 8
// b.如果数字是0~4之间,那就+10;如果数字是5~9之间,数字不变
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 0 && arr[i] <= 4) {
arr[i] += 10;
}
// 如果数字是5~9之间,就不进入上面的if判断,数字保持不变的存入数组中
}
// 此时int[] arr: 6 14 13 8
// c.先得到密码的每一位数,都减5
for (int i = 0; i < arr.length; i++) {
arr[i] -= 5;
}
// 此时int[] arr: 1 9 8 3
// d.将这些数从数组中拿出来,拼接成一串数字,返回给调用处
// 定义整数变量,用于拼接每一位反转后的每一位数字,得到最终加密的密码
int decodePassword = 0;
for (int i = 0; i < arr.length; i++) {
decodePassword = decodePassword * 10 + arr[i];
}
// 循环结束,说明拼接完成,返回最终加密后的密码
return decodePassword;
}
/**
* 2、密码加密
*
* @param password 接收一个系统密码
* @return 返回加密后的密码
*/
public static int getEncryptPassword(int password) {
// a.如果系统密码小于等于0,则返回-1
if (password <= 0) {
return -1;
}
// (1) 计算密码的个数,用作于存储每位密码的数组的长度
// 定义计数变量,用于统计密码的个数
int count = 0;
// 用一个临时变量存储原密码,方便后续使用
int tempPassword = password;
// 使用while循环计算密码的个数
while (password != 0) {
// 假如密码:1983,循环不断除以10
password = password / 10;
// 每除以10一次,就统计次数
count++;
}
// while循环结束,密码个数统计完成!
// (2) 定义一个数组,用于将密码中的每位数存储到数组中,长度就是密码的个数
int[] arr = new int[count];
// (3) 将密码中的每位数都存储到数组中
// 定义一个索引,这个索引的位置是数组的最后一位: 表示从数组最后一个位置往回添加
int index = arr.length - 1;
while (tempPassword != 0) {
// a.先从密码的右边得到每一位数
int ge = tempPassword % 10;
// b.再去掉右边的那位数
tempPassword = tempPassword / 10;
// c.把获取到的每一位数添加到数组中
// 数组名[索引] = 每一位数;
arr[index] = ge;
// 每添加一位数,让索引位置往回移动一位
index--;
}
// while循环结束,说明密码的每位数都已成功添加到数组中了!
// (4) 密码加密
// 假如int[] arr: 1 9 8 3
// a.先得到密码的每一位数,都加5
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 5;
}
// 此时int[] arr: 6 14 13 8
// b.再将每一位数对10求余
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i] % 10;
}
// 此时int[] arr: 6 4 3 8
// c.最后将所有数进行反转
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
// 开始不断交换位置:
// 先用临时变量将当前遍历到的数存储起来
int temp = arr[i];
// 将后一位的数 赋值给 前一位的数的位置
arr[i] = arr[j];
// 将前一位的数 赋值给 后一位的数的位置
arr[j] = temp;
}
// 循环结束,说明数组中所有的数已经完成了反转
// 此时int[] arr: 8 3 4 6
// d.将这些数从数组中拿出来,拼接成一串数字,返回给调用处
// 定义整数变量,用于拼接每一位反转后的每一位数字,得到最终加密的密码
int encryptPassword = 0;
for (int i = 0; i < arr.length; i++) {
// 不断拼接
encryptPassword = encryptPassword * 10 + arr[i];
}
// 循环结束,说明拼接完成,返回最终加密后的密码
return encryptPassword;
}
}
加密前的密码:1983
加密后的密码:8346
解密后的密码:1983
Process finished with exit code 0
需求:

实现:
方式1:
package com.app.comprehensive12;
import java.util.Random;
/*
综合练习:抢红包
方式1
需求:
一个大V直接抽奖,奖品是现金红包,分别有{2, 588, 888, 1000, 10000}五个奖金。
请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
打印效果比如:(随机顺序,不一定是下面的顺序,多运行几次)
888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出
*/
public class Test7 {
public static void main(String[] args) {
// 1、定义数组,用于存储奖池红包数据
int[] jackpotArr = {2, 588, 888, 1000, 10000};
// 2、调用抢红包的方法,传入jackpotArr数组
redWars(jackpotArr);
}
/**
* 抢红包
* @param jackpotArr 接收奖池数组
*/
public static void redWars(int[] jackpotArr) {
// 1、传入的数组如果为null
if (jackpotArr == null) {
System.out.println("数组不能为null!");
return;
}
// 2、定义数组,用于存储抽到的红包数据
int[] awardArr = new int[jackpotArr.length];
// 3、抽奖
// 创建随机数对象
Random rd = new Random();
for (int i = 0; i < jackpotArr.length;) {
// 生成一个随机索引
int randomIndex = rd.nextInt(jackpotArr.length);
// 随机抽取到的奖项
int award = jackpotArr[randomIndex];
// 调用contains方法判断award是否存在于awardArr中
boolean flag = contains(awardArr, award);
// 如果award不存在于awardArr中,就将该数据添加进去
if (!flag) {
awardArr[i] = award;
// 添加完毕后,让索引往后移动一个位置
i++;
}
// 如果不进入上面的if判断,说明award存在于awardArr中,那就继续
}
// 循环结束,抽奖完成,输出
for (int award : awardArr) {
System.out.println(award + "元的奖金被抽出~");
}
}
/**
* 判断传入的奖励数据是否存在于awardArr(奖励数据数组)中
* @param awardArr 奖励数据的数组
* @param award 奖励数据
* @return 存在返回true,不存在返回false
*/
public static boolean contains(int[] awardArr, int award) {
// 遍历奖励数据的数组,依次得到每一个奖励数据
for (int i = 0; i < awardArr.length; i++) {
// 判断award是否存在于awardArr数组中
if (award == awardArr[i]) {
// 存在,返回true
return true;
}
}
// 循环结束,仍然找不到,说明不存在,返回false
return false;
}
}
10000元的奖金被抽出~
888元的奖金被抽出~
2元的奖金被抽出~
1000元的奖金被抽出~
588元的奖金被抽出~
Process finished with exit code 0
方式2:
package com.app.comprehensive12;
import java.util.Random;
/*
综合练习:抢红包
随机抽奖的方式2:打乱顺序
*/
public class Test8 {
public static void main(String[] args) {
// 定义奖池数组,存入红包数据
int[] arr = {1, 100, 200, 300, 488, 10000};
// 创建随机数对象,用于生成随机数
Random rd = new Random();
// 随机抽奖
for (int i = 0; i < arr.length; i++) {
// 随机生成一个索引
int randomIndex = rd.nextInt(arr.length);
// 不断交换位置(打乱顺序)
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
// 遍历输出
for (int a : arr) {
System.out.println(a + "元的奖金被抽出~");
}
}
}
10000元的奖金被抽出~
488元的奖金被抽出~
200元的奖金被抽出~
1元的奖金被抽出~
300元的奖金被抽出~
100元的奖金被抽出~
Process finished with exit code 0
需求:
投注号码由6个红色球号码和1个蓝色球号码组成
红色球号码从133中选择;蓝色球号码从116中选择。

实现:
package com.app.comprehensive12;
import java.util.Random;
import java.util.Scanner;
/*
综合练习:双色球系统
需求:
投注号码由6个红色球号码和1个蓝色球号码组成;
红色球号码从1~33中选择;
蓝色球号码从1~16中选择。
*/
public class Test9 {
public static void main(String[] args) {
// 1、调用生成号码的方法,生成中奖号码:6个红色球+1个蓝色球
int[] numberArr = createNumbers();
System.out.println("================================");
System.out.println("本期双色球号码:");
queryNumbers(numberArr);
System.out.println("================================");
// 2、调用用户选号的方法,让用户输入自己要买的号码:6个红色球+1个蓝色球
int[] userInputArr = userInputNumbers();
System.out.println("----------------------------");
System.out.println("您选的双色球号码:");
queryNumbers(userInputArr);
System.out.println("----------------------------\n");
// 3、调用判断用户中奖情况的方法,输出用户中奖情况
judgeUserAward(numberArr, userInputArr);
}
/**
* 判断用户中奖情况
*
* @param numberArr 本期双色球号码数组
* @param userInputArr 用户选的双色球号码数组
*/
public static void judgeUserAward(int[] numberArr, int[] userInputArr) {
// 1、定义两个变量,分别用于统计用户的红色球、蓝色球的中奖数量
int redCount = 0;
int blueCount = 0;
// 2、统计用户选的红色球号码中了多少个
// 先在外部遍历用户选的双色球号码数组,依次得到每个号码
for (int i = 0; i < userInputArr.length - 1; i++) {
int redNumber = userInputArr[i];
// 然后再内部遍历本期双色球号码数组,依次得到每个号码
for (int j = 0; j < numberArr.length - 1; j++) {
// 判断当前用户选的红色球号码 是否与 本期红色球号码
if (redNumber == numberArr[j]) {
// 相等,说明中奖了,开始统计红色球中奖号码的个数
redCount++;
// 既然已经中奖了,那就不需要一一和后面的号码做比较了
// 直接跳出内部循环,继续判断用户的下一个红色球号码是否中奖
break;
}
}
}
// 循环结束,说明用户的红色球号码的中奖数量已经统计完了
// 3、判断用户选的蓝色球号码是否中奖
if (userInputArr[userInputArr.length - 1] == numberArr[numberArr.length - 1]) {
// 中奖,开始统计蓝色球中奖号码的个数
blueCount++;
}
System.out.println("红色球中奖:" + redCount + "个");
System.out.println("蓝色球中奖:" + blueCount + "个");
// 4、判断中奖情况,输出中奖的级别及奖金
if (redCount == 6 && blueCount == 1) { // 一等奖:中6个红球+1个蓝球
System.out.println("恭喜您,中了一等奖,1000万元已到账~");
} else if (redCount == 6 && blueCount == 0) { // 二等奖:中6个红球+0个蓝球
System.out.println("恭喜您,中了二等奖,500万元已到账~");
} else if (redCount == 5 && blueCount == 1) { // 三等奖:中5个红球+1个蓝球
System.out.println("恭喜您,中了三等奖,3000元已到账~");
} else if ((redCount == 5 && blueCount == 0) || (redCount == 4 && blueCount == 1)) {
// 四等奖:中5个红球+0个蓝球 或 中4个红球+1个蓝球
System.out.println("恭喜您,中了四等奖,200元已到账~");
} else if ((redCount == 4 && blueCount == 0) || (redCount == 3 && blueCount == 1)) {
// 五等奖:中4个红球+0个蓝球 或 中3个红球+1个蓝球
System.out.println("恭喜您,中了五等奖,10元已到账~");
} else if ( // 六等奖:中2个红球+1个蓝球 或 中1个红球+1个蓝球 或 中0个红球+1个蓝球
(redCount == 2 && blueCount == 1) ||
(redCount == 1 && blueCount == 1) ||
(redCount == 0 && blueCount == 1)
) {
System.out.println("恭喜您,中了六等奖,5元已到账~");
}else {
// 没中奖
System.out.println("谢谢惠顾~ 欢迎下次光临!!^_^");
}
}
/**
* 查询所有双色球号码
*
* @param numberArr 接收一个数组
*/
public static void queryNumbers(int[] numberArr) {
// 遍历双色球号码数组
for (int i = 0; i < numberArr.length; i++) {
// 如果是前6个,则说明是红色球号码,则输出:颜色+号码,并使用空格隔开
if (i >= 0 && i <= 5) {
System.out.print("红" + numberArr[i] + " ");
} else {
// 如果是最后一个,则说明是蓝色球号码,则输出:颜色+号码
System.out.println("蓝" + numberArr[i]);
}
}
}
/**
* 用户选号
*
* @return 将存储有用户选号的数组返回
*/
public static int[] userInputNumbers() {
// 1、定义数组用于存储用户选号的双色球号码:6个红色球+1个蓝色球
int[] userInputArr = new int[7];
// 2、用户选择6个红色球号码
// 创建键盘录入对象,用于从键盘录入数据
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 6; ) {
// 用户开始选择红色球号码
System.out.println("请您选择第" + (i + 1) + "个红色球号码:");
int redNumber = sc.nextInt();
// 判断用户选的号码是否超出了红色球号码范围
if (redNumber >= 1 && redNumber <= 33) {
// 没超出,则判断用户当前选的号码是否与选过的号码重复
boolean flag = contains(userInputArr, redNumber);
if (!flag) {
// 没重复,则将用户的选号添加到数组中
userInputArr[i] = redNumber;
// 添加完成后,让索引位置往后移一位
i++;
} else {
System.out.println("sorry!您选的红色球号码已经选过了!请您重新选择~");
}
} else {
// 已超出
System.out.println("sorry!您选的红色球号码已超出红色球号码规定范围!请您重新选择~ ^_^~");
}
}
// 3、用户选择1个蓝色球号码
while (true) {
System.out.println("请您选择蓝色球号码:");
int blueNumber = sc.nextInt();
// 判断用户选的号码是否超出了蓝色球号码范围
if (blueNumber >= 1 && blueNumber <= 16) {
// 没超出,则将用户的选号添加到数组中的末尾
userInputArr[userInputArr.length - 1] = blueNumber;
// 添加完成后,跳出死循环
break;
}else {
System.out.println("sorry!您选的蓝色球号码已超出蓝色球号码规定范围!请您重新选择~ ^_^~");
}
}
// 循环结束,说明用户选号完成。
// 4、返回数组
return userInputArr;
}
/**
* 生成中奖号码
*
* @return 将存储有中奖号码的数组返回
*/
public static int[] createNumbers() {
// 1、定义数组用于存储生成好的中奖号码
// 蓝色球号码6个 + 红色球号码1个
int[] numberArr = new int[7];
// 2、生成6个红色球号码
// 创建随机数对象,用于生成随机数
Random rd = new Random();
for (int i = 0; i < 6; ) {
// 随机生成一个1~33范围的红色球号码
// 唯一不重复:不能与其他红色球号码重复!!
int redNumber = rd.nextInt(33) + 1;
// 调用contains方法判断数组中是否已存在该红色球号码
boolean flag = contains(numberArr, redNumber);
if (!flag) {
// 不存在,则添加该红色球号码到数组中
numberArr[i] = redNumber;
// 添加完成后,让索引往后移动一位
i++;
}
// 如果程序不进入上面的if,说明该红色球号码存在于数组中
// 则索引位置还是处于当前位置不变,重新随机生成一个1~33范围的红色球号码
}
// 循环结束,说明6个红色球号码已全部生成好了!
// 3、生成1个蓝色球号码
// 随机生成一个1~16范围的蓝色球号码
int blueNumber = rd.nextInt(16) + 1;
// 将这个蓝色球号码添加到数组的末尾
numberArr[numberArr.length - 1] = blueNumber;
// 4、6个红色球号码 + 1蓝色球号码 已全部生成好了!返回该数组
return numberArr;
}
/**
* 查询数组中是否存在指定元素
*
* @param arr 接收一个数组
* @param number 接收一个指定元素
* @return 存在返回true,不存在返回false
*/
public static boolean contains(int[] arr, int number) {
// 遍历数组,依次得到数组中的每一个元素
for (int i = 0; i < arr.length; i++) {
// 判断该元素是否与其他元素相等
if (number == arr[i]) {
// 相等,返回true
return true;
}
}
// 循环结束,说明该元素与其他元素不相等,返回false
return false;
}
}
================================
本期双色球号码:
红12 红9 红11 红33 红10 红29 蓝15
================================
请您选择第1个红色球号码:
12
请您选择第2个红色球号码:
33
请您选择第3个红色球号码:
9
请您选择第4个红色球号码:
10
请您选择第5个红色球号码:
29
请您选择第6个红色球号码:
11
请您选择蓝色球号码:
15
----------------------------
您选的双色球号码:
红12 红33 红9 红10 红29 红11 蓝15
----------------------------
红色球中奖:6个
蓝色球中奖:1个
恭喜您,中了一等奖,1000万元已到账~
Process finished with exit code 0
二维数组:
数组中的数组二维数组。我们之前学的都是一维数组:

格式:
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2}, {元素1,元素2},...};
范例:
int[][] arr = new int[][]{{11,22}, {33,44}};
简化格式(常用):
数据类型[][] 数组名 = {{元素1,元素2}, {元素1,元素2},...};
范例1(常用):
int[][] arr = {{11,22}, {33,44}};
范例2:
int arr[][] = {{11,22}, {33,44}};
package com.app.demo13_tow_array;
/*
目标:学习二维数组的静态初始化、遍历二维数组
二维数组:
数组中的数组;
一个大的数组里,装着多个一维数组
*/
public class TowArrayDemo1 {
public static void main(String[] args) {
// 1、二维数组静态初始化的格式
// 数据类型[][] 数组名 = new 数据类型[][]{{元素1, 元素2}, {元素1, 元素2}};
// 格式1
int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5, 6, 7, 8}};
// 格式2
int[][] arr2 = {{1, 2, 3}, {4, 5, 6, 7, 8}};
// 格式3
// 建议这样定义,把每一个一位数组单独写成一行
// 注意:每一个一维数组其实是二维数组中的元素,所以每一个一维数组之间需要用逗号隔开。
// 最后一个数组后面不需要加逗号,与一维数组同理。
int[][] arr3 = {
{1, 2, 3},
{4, 5, 6, 7, 8}
};
// 2、获取元素
/*
arr[i][j]
arr: 二维数组
i: 二维数组的索引,获取出来的是里面的一维数组
j: 表示一维数组中的索引,获取出来的是真正的元素
*/
System.out.println(arr3[0]); // 表示获取二维数组中的第一个一维数组的内存地址
// 打印元素1
// arr3[0]: 二维数组中的第一个一维数组
// arr3[0][0]: 获取第一个一维数组0索引的元素
System.out.println(arr3[0][0]);
// 打印元素7
// arr3[1]: 二维数组中的第二个一维数组
// arr3[1][3]: 获取第二个一维数组3索引的元素
System.out.println(arr3[1][3]);
// 超出了二维数组的长度范围
// System.out.println(arr3[2]); // 报错:ArrayIndexOutOfBoundsException
System.out.println("------------------------------");
// 3、遍历二维数组
// 思想:先获取到一维数组,再遍历一维数组获取元素
// 外循环:遍历二维数组,依次得到里面的每一个一维数组
for (int i = 0; i < arr3.length; i++) { // 先遍历获取到一维数组
// i: 表示二维数组中的每一个索引
// arr3[i]: 表示二维数组中的每一个元素(一维数组)
// 内循环:遍历一维数组,依次得到里面的每一个元素
for (int j = 0; j < arr3[i].length; j++) { // 再遍历一维数组获取元素
// j: 一维数组中的每一个元素
System.out.print(arr3[i][j] + " ");
}
// 内循环结束,说明遍历完了一个一维数组的元素,打印换行,接着打印下一个一维数组的元素
System.out.println();
}
}
}
[I@119d7047
1
7
------------------------------
1 2 3
4 5 6 7 8
Process finished with exit code 0
格式:
数据类型[][] 数组名 = new 数据类型[m][n];
m:表示二维数组的长度(二维数组可以存放多少个一维数组)
n:表示一维数组的长度(一维数组可以存放多少个元素)
范例:
int[][] arr = new int[2][3];
2个一维数组,每一个一维数组中可以存放3个int类型的元素。package com.app.demo13_tow_array;
/*
目标:学习二维数组的动态初始化、遍历二维数组
*/
public class TowArrayDemo2 {
public static void main(String[] args) {
// 1、动态初始化一个二维数组
/*
6: 表示二维数组的长度,可以存在6个一维数组
6: 表示一维数组的长度,每个一维数组可以存放6个int类型的元素
*/
int[][] arr = new int[6][6];
// 2、添加元素
arr[0][0] = 66;
// 3、遍历二维数组
// 外循环:遍历二维数组,依次得到每个一维数组
for (int i = 0; i < arr.length; i++) {
// 内循环:遍历一维数组,依次得到每个元素
for (int j = 0; j < arr[i].length; j++) {
System.out.print(j == arr[i].length - 1 ? arr[i][j] : arr[i][j] + " ");
}
// 当内循环结束,说明已经遍历完一个一维数组,打印一个换行
System.out.println();
}
}
}
66 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
Process finished with exit code 0

特殊情况一:(了解)


特殊情况二:(了解)



1、什么时候使用二维数组呢?
2、关于二维数组我们需要掌握什么?
3、如何给二维数组中的元素赋值?
格式:
数组名[索引] = 值; // 给二维数组中的元素赋值
数组名[索引][索引] = 值; // 给二维数组中的一维数组赋值
4、如何遍历二维数组?
场景:
需求:
分析:
实现:
静态初始化二维数组的方式实现:
package com.app.demo13_tow_array;
/*
二维数组的练习:
静态初始化二维数组:
计算每个季度的总营业额和全年的总营业额。
第一个季度:22,66,44 一维数组
第二个季度:77,33,88 一维数组
第三个季度:25,45,65 一维数组
第四个季度:11,66,99 一维数组
*/
public class TowArrayTest3 {
public static void main(String[] args) {
// 1、静态初始化一个二维数组,分别存入四个季度的营业额
int[][] yearArr = {
{22, 66, 44},
{77, 33, 88},
{25, 45, 65},
{11, 66, 99}
};
// 2、调用计算每个季度的营业额和的方法
// 方式1:不推荐
/*int oneSum = getSum(yearArr[0]);
int towSum = getSum(yearArr[1]);
int threeSum = getSum(yearArr[2]);
int fourSum = getSum(yearArr[3]);
System.out.println("第一季度的营业额的总和:" + oneSum + "万元");
System.out.println("第二季度的营业额的总和:" + towSum + "万元");
System.out.println("第三季度的营业额的总和:" + threeSum + "万元");
System.out.println("第四季度的营业额的总和:" + fourSum + "万元");
// 计算全年的总营业额
int yearSum = oneSum + towSum + threeSum + fourSum;
System.out.println("全年的总营业额为:" + yearSum + "万元~");
*/
// 定义变量,用于统计全年的总营业额
int yearSum = 0;
// 方式2:推荐
for (int i = 0; i < yearArr.length; i++) {
// yearArr[i]: 表示依次得到的季度数组(一维数组)
// 定义一个数组,接收一下当前遍历到的一维数组
int[] quarterArr = yearArr[i];
// 将当前季度的数组传入getSum方法中,计算每个季度的总营业额
int sum = getSum(quarterArr);
System.out.println("第" + (i+1) + "个季度的总营业额为:" + sum + "万元~");
// 计算全年的总营业额
yearSum += sum;
}
System.out.println("全年的总营业额为:" + yearSum + "万元~");
}
/**
* 计算每个季度的营业额总和
* @param arr 接收一个季度的营业额的数组
* @return 将当前季度的营业额总和返回
*/
public static int getSum(int[] arr) {
// 1、定义变量,用于统计季度营业额的和
int sum = 0;
// 2、遍历数组,依次得到每个营业额
for (int i = 0; i < arr.length; i++) {
// 累加季度营业额的和
sum += arr[i];
}
// 3、循环结束,说明统计完成,返回总和
return sum;
}
}
第1个季度的总营业额为:132万元~
第2个季度的总营业额为:198万元~
第3个季度的总营业额为:135万元~
第4个季度的总营业额为:176万元~
全年的总营业额为:641万元~
Process finished with exit code 0
动态初始化二维数组的方式实现:
package com.app.demo13_tow_array;
import java.util.Scanner;
/*
二维数组的练习:
动态初始化二维数组:
计算每个季度的总营业额和全年的总营业额。
第一个季度:22,66,44 一维数组
第二个季度:77,33,88 一维数组
第三个季度:25,45,65 一维数组
第四个季度:11,66,99 一维数组
*/
public class TowArrayTest3Plus {
public static void main(String[] args) {
// 1、键盘录入各个季度的营业额
int[][] yearArr = getYearArr(4, 3);
// 2、查看一下各个季度的营业额
System.out.println("查看所有季度的营业额:");
queryQuarterTurnover(yearArr);
System.out.println("-------------------------------------");
// 3、计算各个季度的总营业额和全年营业额
sumQuaterTurnoverAndYearTurnover(yearArr);
}
/**
* 计算总营业额
*
* @param yearArr 各个季度的营业额的二维数组
*/
public static void sumQuaterTurnoverAndYearTurnover(int[][] yearArr) {
// 1、定义两个变量,分别用于统计各个季度的总营业额、全年的总营业额
int yearSum = 0;
int quarterSum = 0;
// 2、遍历二维数组,依次得到每个季度的营业额数组
for (int i = 0; i < yearArr.length; i++) {
// yearArr[i]: 表示每个季度的营业额数组
// 定义变量,接收每个季度的营业额数组
int[] quarterArr = yearArr[i];
// 调用getQuarterSum方法,计算每个季度的总营业额
quarterSum = getQuarterSum(quarterArr);
System.out.println("第" + (i+1) + "季度的总营业额为:" + quarterSum + "万元");
// 计算全年的总营业额: 循环依次累加各个季度的总营业额
yearSum += quarterSum;
}
// 3、循环结束,全年的总营业额统计完毕
System.out.println("全年的总营业额为:" + yearSum + "万元");
}
/**
* 计算各个季度的总营业额
* @param quarterArr 各个季度的营业额数组
* @return 返回各个季度的总营业额
*/
public static int getQuarterSum(int[] quarterArr) {
// 1、定义变量,用于统计各个季度的总营业额
int quarterSum = 0;
// 2、遍历各个季度的营业额数组
for (int i = 0; i < quarterArr.length; i++) {
// 循环依次累加营业额
quarterSum += quarterArr[i];
}
// 3、循环结束,统计完毕,返回各个季度的总营业额
return quarterSum;
}
/**
* 键盘录入各个季度的营业额
*
* @param oneDimensionalArrayLength 表示二维数组的长度:可以存放指定数量的一维数组
* @param towDimensionalArrayLength 表示一位数组的长度:可以存放指定数量的int类型的元素
* @return 返回各个季度的营业额的数组
*/
public static int[][] getYearArr(int oneDimensionalArrayLength,
int towDimensionalArrayLength) {
// 1、动态初始化一个二维数组
int[][] yearArr = new int[oneDimensionalArrayLength][towDimensionalArrayLength];
// 2、键盘录入各个季度的营业额
Scanner sc = new Scanner(System.in);
// 定义一个空数组,用于将各个季度的营业额封装成一个数组
// 外循环:遍历二维数组,依次得到每个一维数组
for (int i = 0; i < yearArr.length; i++) {
// yearArr[i]: 表示依次得到的季度数组(一维数组)
// 内循环:遍历一维数组,依次将各个季度的营业额录入一维数组中
for (int j = 0; j < yearArr[i].length; j++) {
System.out.println("请您输入第" + (i + 1) + "季度的第" + (j + 1) + "个营业额:");
int turnover = sc.nextInt();
// 将营业额添加进一维数组
yearArr[i][j] = turnover;
}
}
// 季度的营业额录入完毕,返回二维数组
return yearArr;
}
/**
* 查看各个季度的营业额
*
* @param yearArr 各个季度的营业额的二维数组
*/
public static void queryQuarterTurnover(int[][] yearArr) {
// 遍历一维数组,依次得到每个元素
for (int i = 0; i < yearArr.length; i++) {
System.out.print("第" + (i + 1) + "季度:");
for (int j = 0; j < yearArr[i].length; j++) {
// j: 表示一维数组的索引
/*
三元运算符判断:
如果当前 索引位置 是数组的最后一位,则直接输出元素
如果当前 索引位置 不是数组的最后一位,则输出元素加个空格隔开
*/
System.out.print(j == yearArr[i].length - 1 ? yearArr[i][j] : yearArr[i][j] + " ");
}
// 每遍历完一个季度的营业额,就打印换行输出下一个季度的营业额
System.out.println();
}
}
}
请您输入第1季度的第1个营业额:
22
请您输入第1季度的第2个营业额:
66
请您输入第1季度的第3个营业额:
44
请您输入第2季度的第1个营业额:
77
请您输入第2季度的第2个营业额:
33
请您输入第2季度的第3个营业额:
88
请您输入第3季度的第1个营业额:
25
请您输入第3季度的第2个营业额:
45
请您输入第3季度的第3个营业额:
65
请您输入第4季度的第1个营业额:
11
请您输入第4季度的第2个营业额:
66
请您输入第4季度的第3个营业额:
99
查看所有季度的营业额:
第1季度:22 66 44
第2季度:77 33 88
第3季度:25 45 65
第4季度:11 66 99
-------------------------------------
第1季度的总营业额为:132万元
第2季度的总营业额为:198万元
第3季度的总营业额为:135万元
第4季度的总营业额为:176万元
全年的总营业额为:641万元
Process finished with exit code 0
请您输入第1季度的第1个营业额:
2
请您输入第1季度的第2个营业额:
1
请您输入第1季度的第3个营业额:
2
请您输入第2季度的第1个营业额:
3
请您输入第2季度的第2个营业额:
3
请您输入第2季度的第3个营业额:
3
请您输入第3季度的第1个营业额:
10
请您输入第3季度的第2个营业额:
20
请您输入第3季度的第3个营业额:
30
请您输入第4季度的第1个营业额:
6
请您输入第4季度的第2个营业额:
6
请您输入第4季度的第3个营业额:
6
查看所有季度的营业额:
第1季度:2 1 2
第2季度:3 3 3
第3季度:10 20 30
第4季度:6 6 6
-------------------------------------
第1季度的总营业额为:5万元
第2季度的总营业额为:9万元
第3季度的总营业额为:60万元
第4季度的总营业额为:18万元
全年的总营业额为:92万元
Process finished with exit code 0