前言
大一下学期学Java,第一次写博客,在Java基础阶段的数组部分,数组的缩减是数组基础阶段的经典问题,我现在用一个案例把它完善,让代码的逻辑更加严谨。
案例——成绩录入数组缩减问题
希望对大家有所帮助。
提示:以下是本篇文章正文内容,下面案例可供参考
一、数组通过键盘录入来初始化
public class Text2 {
public static void main(String[] args) {
//键盘录入成绩
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字的长度:");
//用leanth变量接受长度
int length = scanner.nextInt();
int[] score = new int[length];
//遍历数组,输入第几个成绩,依次录入
for (int i = 0; i < score.length; i++) {
System.out.println("请输入第" + (i + 1) + "个成绩");
score[i] = scanner.nextInt();
}
}
}
二、初始化菜单窗口,用swich分支语句来编写,里面的语句都定义为方法,完善操作
OUT://这里用到OUT来结束多层循环,break只能结束一层循环
//定义死循环,录入成绩后,可反复操作,后续通过操作来终止整个代码运行
while (true) {
System.out.println("请输入要进行的操作编号");
System.out.println("1.显示所有的成绩");
System.out.println("2.求最好的成绩");
System.out.println("3.求平均成绩");
System.out.println("4.删除一个随机成绩,并且显示新的所有成绩");
int id = scanner.nextInt();
switch (id) {
case 1:
//显示成绩场景
point1(score);
System.out.println("==================");
break;
case 2:
//显示最好成绩场景
point2(score);
System.out.println("==================");
break;
case 3:
//求最好成绩场景
point3(score);
System.out.println("==================");
break;
case 4:
//删除一个数组,并显示剩下的成绩
point4(score, scanner);
System.out.println("==================");
break;
default:
System.out.println("你的操作有误,请重新操作");
break;
}
三、继续完善后续操作
//定义死循环,反复执行命令
while (true) {
System.out.println("5.退出操作命令");
System.out.println("6.继续执行");
int point = scanner.nextInt();
if (point == 5){
break OUT;
}else if (point == 6){
System.out.println("继续执行!");
break;
}else {
System.out.println("没有该操作命令,请重新输入");
}
}
前三个求平均数方法的具体代码
public static void point1(int[] score) {
for (int i = 0; i < score.length; i++) {
System.out.println("第" + (i + 1) + "次成绩为" + score[i]);
}
}
public static void point2(int[] score) {
int max = score[0];
for (int i = 1; i < score.length; i++) {
if (max < score[i]) {
max = score[i];
}
}
System.out.println("最好的成绩为" + max);
}
public static void point3(int[] score) {
double sud = 0;
int sum = 0;
for (int i = 0; i < score.length; i++) {
sum += score[i];
}
sud = sum / (score.length);
System.out.println("平均成绩" + sud);
}
核心部分,最难的操作
这里定义死循环,反复操作,在操作的同时,要满足原来的数组指向新数组,其放在的位置,都很严谨,具体看注释
在这里插入代码片 public static void point4(int[] score, Scanner scanner)
//定义死循环,反复执行删除的操作
OUT:
while (true) {
System.out.println("请删除你所要删除的成绩");
//定义index索引,用于方便看,不让与循环的局部变量混淆
int index = 0;
//定义一个分数变量来结束键盘录入
int scoreRandom = scanner.nextInt();
/*定义一个新数组,(这里在涉及数组知识点
:一旦数组定义出来,它的元素个数就是固定的,不能随意更改,
可以通过定义一个新数组,把新数组的地址赋给原数组,也就是原数组指向新数组)*/
int[] scoreNew = new int[score.length - 1];
/*定义标识符,
来判断键盘录入的数据是与数组中的数据都不相等,或者有相等的*/
boolean flag = true;
for (int i = 0; i < score.length; i++) {
if (scoreRandom == score[i]) {
//若出现相同的,则将flag改为false
flag = false;
//索引为当前的i
index = i;
/*这里表示的是从当前数据的索引开始,
一直到数组最后一个元素,从当前开始依次给前一个数组赋值
*/
for (int j = index + 1; j < score.length; j++) {
score[index] = score[j];
}
/*然后将原数组遍历,
如果键盘录入[1,2,3,4,5]
选择删除3,这时原数组就成了[1,2,4,5,0],
这里的第五个元素没有了,但长度还是5,
所以第五个元素就变成了0(若不定义,默认是0)*/
//然后将此数组给予新数组
for (int f = 0; f < scoreNew.length; f++) {
scoreNew[f] = score[f];
}
//再将原始数组指向新数组,就完成了
score = scoreNew;
}
}
//找遍了全部的数组,都没有发现与之相等的,则:
if (flag) {
System.out.println("没有该成绩,请重新输入");
}
//展示出成绩,显示出变化
for (int i = 0; i < score.length; i++) {
System.out.println("第" + (i + 1) + "次成绩为" + score[i]);
System.out.println("================");
System.out.println();
}
//这里表示的是:当数组小于时就不能再允许删除了
if (score.length < 1) {
break;
}
//后续操作执行,于上文逻辑相同
while (true) {
System.out.println("\n" + "是否继续删除");
System.out.println("n:" + "退出" + "\t" + "y:" + "继续执行");
String answer = scanner.next();
if (answer.equals("n")) {
break OUT;
} else if (answer.equals("y")) {
System.out.println("继续执行");
break;
} else {
System.out.println("没有该命令,请重新输入");
}
}
}
}
全部代码展示
package price._1;
import java.util.Scanner;
public class Text2 {
public static void main(String[] args) {
//键盘录入成绩
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字的长度:");
int length = scanner.nextInt();
int[] score = new int[length];
//输入第几个成绩,依次录入
for (int i = 0; i < score.length; i++) {
System.out.println("请输入第" + (i + 1) + "个成绩");
score[i] = scanner.nextInt();
}
//选择操作,完成流程
OUT:
while (true) {
System.out.println("请输入要进行的操作编号");
System.out.println("1.显示所有的成绩");
System.out.println("2.求最好的成绩");
System.out.println("3.求平均成绩");
System.out.println("4.删除一个随机成绩,并且显示新的所有成绩");
int id = scanner.nextInt();
switch (id) {
case 1:
//显示成绩场景
point1(score);
System.out.println("==================");
break;
case 2:
//显示最好成绩场景
point2(score);
System.out.println("==================");
break;
case 3:
//求最好成绩场景
point3(score);
System.out.println("==================");
break;
case 4:
//删除一个数组,并显示剩下的成绩
point4(score, scanner);
System.out.println("==================");
break;
default:
System.out.println("你的操作有误,请重新操作");
break;
}
while (true) {
System.out.println("5.退出操作命令");
System.out.println("6.继续执行");
int point = scanner.nextInt();
if (point == 5){
break OUT;
}else if (point == 6){
System.out.println("继续执行!");
break;
}else {
System.out.println("没有该操作命令,请重新输入");
}
}
}
}
public static void point1(int[] score) {
for (int i = 0; i < score.length; i++) {
System.out.println("第" + (i + 1) + "次成绩为" + score[i]);
}
}
public static void point2(int[] score) {
int max = score[0];
for (int i = 1; i < score.length; i++) {
if (max < score[i]) {
max = score[i];
}
}
System.out.println("最好的成绩为" + max);
}
public static void point3(int[] score) {
double sud = 0;
int sum = 0;
for (int i = 0; i < score.length; i++) {
sum += score[i];
}
sud = sum / (score.length);
System.out.println("平均成绩" + sud);
}
public static void point4(int[] score, Scanner scanner) {
OUT:
while (true) {
System.out.println("请删除你所要删除的成绩");
int index = 0;
int scoreRandom = scanner.nextInt();
int[] scoreNew = new int[score.length - 1];
boolean flag = true;
for (int i = 0; i < score.length; i++) {
if (scoreRandom == score[i]) {
flag = false;
index = i;
for (int j = index + 1; j < score.length; j++) {
score[index] = score[j];
}
for (int f = 0; f < scoreNew.length; f++) {
scoreNew[f] = score[f];
}
score = scoreNew;
}
}
if (flag) {
System.out.println("没有该成绩,请重新输入");
}
for (int i = 0; i < score.length; i++) {
System.out.println("第" + (i + 1) + "次成绩为" + score[i]);
System.out.println("================");
System.out.println();
}
if (score.length < 1) {
break;
}
while (true) {
System.out.println("\n" + "是否继续删除");
System.out.println("n:" + "退出" + "\t" + "y:" + "继续执行");
String answer = scanner.next();
if (answer.equals("n")) {
break OUT;
} else if (answer.equals("y")) {
System.out.println("继续执行");
break;
} else {
System.out.println("没有该命令,请重新输入");
}
}
}
}
}