初代if-else版本,没有使用引用数据类型
该系统记录了学生的姓名,年龄,性别,首先使用了三个一维数组,分别用于记录 学生姓名,年龄,性别。
String [] arrayName =new String[100];
String [] arrayGender =new String[100];
String [] arrayAge =new String[100];
然后通过while语句循环执行程序,此处的(condition)设置为True
while(true)
{ //循环体
}
首先,添加方法if(comd==1),当用户输入指令1时执行
if(comd==1) { //添加学生信息
int i =0;int j =0;int k =0;
Scanner sname =new Scanner(System.in);
System.out.println("请输入学生姓名:");
String name =sname.nextLine();
if (arrayName[i]==null) {
arrayName[i]= name;
System.out.println("请输入学生性别:");
Scanner ssgender =new Scanner(System.in);
String gender =ssgender.nextLine();
arrayGender[j]=gender;
System.out.println("请输入学生年龄:");
Scanner sage =new Scanner(System.in);
String age =sage.nextLine();
arrayAge[k]=age;
System.out.println("已添加");
}else {
i++;j++;k++;
arrayName[i]= name;
System.out.println("请输入学生性别:");
Scanner ssgender =new Scanner(System.in);
String gender =ssgender.nextLine();
arrayGender[j]=gender;
System.out.println("请输入学生年龄:");
Scanner sage =new Scanner(System.in);
String age =sage.nextLine();
arrayAge[k]=age;
}
}
第二,删除操作,在执行过添加后,如果要进行删除操作,执行if(comd==2);
else if (comd==2) {
System.out.println("*********************");
System.out.println("请输入要删除学生姓名:");
Scanner ssname =new Scanner(System.in);
String name =ssname.nextLine();
for (int i = 0; i < arrayName.length;) {
boolean res= arrayName[i].equals(name);
if(res) {
arrayName[i]=null;
arrayAge[i]=null;
arrayGender[i]=null;
System.out.println("删除成功!");
break;
}else {
i++;
}
//删除学生
}
}
三、更改已经添加的成员信息if(comd==3);
else if(comd==3) {
System.out.println("*********************");
System.out.println("请输入要更改的学生姓名:");
Scanner ssname =new Scanner(System.in);
String name =ssname.nextLine(); //更改学生
for (int i = 0; i < arrayName.length;) {
boolean res= arrayName[i].equals(name);
if(res) {
System.out.println("请输入新名称:");
Scanner Nname =new Scanner(System.in);
String nNname =Nname.nextLine();
arrayName[i]=nNname;
System.out.println("请输入年龄:");
Scanner Aage =new Scanner(System.in);
String aAage =Aage.nextLine();
arrayAge[i]=aAage;
System.out.println("请输入性别:");
Scanner Ggender =new Scanner(System.in);
String gGgender =Ggender.nextLine();
arrayGender[i]=gGgender;
break;
}else {
i++;
}
}}
四、查询操作 if(comd==4); //此处遇到问题1:在循环条件中i++执行时dead code问题,后来使用else{i++;}来实现迭代,保证数组能查询至array.length-1处, 后面在使用equals();方法时出现了空指针异常,原因是没有考虑到在数组中查询时,如果之前删除了这个元素,这个位置的array[i]就会为空所以不能写为:
Scanner ssname =new Scanner(System.in);
String name =ssname.nextLine();
for (int i = 0; i < arrayName.length;) {
boolean res= arrayName[i].equals(name);
会出现空指针异常,解决办法为name写在前面,因为一般情况下用户的输入不会为空,所以可以通过此方法来规避空指针异常(应该不是最优解.....)。
改完后代码为:
else if (comd==4) {
//查询信息
System.out.println("*********************");
System.out.println("请输入学生姓名:");
Scanner ssname =new Scanner(System.in);
String name =ssname.nextLine();
for (int i = 0; i < arrayName.length;) {
boolean res= name.equals(arrayName[i]);
if(res) {
System.out.println("*********************");
System.out.println("姓名:"+arrayName[i]+" "+"年龄:"+arrayAge[i]+" "+"性别:"+arrayGender[i]);
System.out.println("*********************");
break;
}else {
i++;
}
}
}
好了,增删改查结束,接下来用了两个条件来执行是否跳出程序和输入错误指令的提示
else if(comd==5)
{
System.out.println("再见!");
break; //跳出程序
}else {
System.out.println("没有该指令,请重新输入!");
}
这种方法的实现比较初级,没有体现java语言的引用数据类型的优势,还可以使用new 一个Student类用二维数组,来存储数据,用参数传递的方法实现比较快捷和高效一些,写一个Student类传String name;int age;int id ,将方法写在类中,然后通过调用来实现。
package com.briup.day07;
public class Student {
int id ;
String name;
public void a(int id,String name) {
this.id =id;
this.name =name;
}
/**
* 这是获取姓名和学号的方法
*
*/
public void b() {
System.out.print(id+":"+name+" ");
}
public String getName() {
return name;
}
}