菜单类,要实现什么功能?
1,一个界面,可以有不同选项供选
2,这个界面必须循环出现,多次供用户选择
3,不同选项对应不同功能,调用不同的类
1,界面
我们使用输出语句来打印一个界面:
System.out.println("---------------菜单--------------");
System.out.println("输入数字,选择数字进行操作");
System.out.println("1,增加");
System.out.println("2,删除");
System.out.println("3,修改");
System.out.println("4,查找");
System.out.println("5,退出");
实现类似效果:
2,循环出现菜单
我们使用while循环,这样方便控制循环,当然,我们需要一个布尔类型的变量——作为循环条件
boolean flag = true;
int choice = -1;
while (flag) {
System.out.println("---------------菜单--------------");
System.out.println("输入数字,选择数字进行操作");
System.out.println("1,增加");
System.out.println("2,删除");
System.out.println("3,修改");
System.out.println("4,查找");
System.out.println("5,退出");
}
3,不同选项对应不同功能
3.1,如何让控制台输入东西可以被接收,从而让程序选择不同的方法?
答:scanner类
我们声明一个scanner类,让它来接收控制台输入
Scanner scanner = new Scanner(System.in);
这里由数字作为选项,我们需要把控制台的输入赋值给一个整型变量,让它来控制选择哪个选项
choice = scanner.nextInt();
3.2,不同选项 对应 不同的类方法
很明显,我们使用switch函数,而switch函数判断case的变量就是前面的choice
switch (choice) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
System.out.println("已经退出程序");
flag = false;
break;
}
然后,我们还需要一个方法,来降低耦合,并且让每个选项(增删改查)能够循环使用,直到用户想要执行其他操作
private static void circle(Scanner scanner, int choice) {
//把循环执行的逻辑防在菜单类,各司其职
boolean controller = true;
while (controller) {
switch (choice) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
System.out.println("当前的数据:"+Arrays.toString(arrays.getArr()));
System.out.println("输入false退出,输入true继续");
controller = scanner.nextBoolean();
}
}
我们也得修改一下控制大循环(用来控制当前的功能方法的循环)的controller变量,否则一旦用户输入错误的值,就会报错:
定义一个小循环,除非用户输入正确的字符,否则就一直循环
equal方法可以对比内容,我们定义一个t来接收输入,如果是true或false就相应赋值给controller,并且跳出这个小循环,
如果输入的是错误的,就不跳出小循环,让它继续循环(小循环)
while (true) {
System.out.println("输入false退出,输入true继续");
String t = scanner.next();
//这里防止误输或恶意输入
if (t.equals("true")) {
controller = true;
break;
} else if (t.equals("false")) {
controller = false;
break;
} else {
System.out.println("请按提示输入");
}
}
好了,我们写好了菜单类,完整的菜单如下
public static void menu() throws Exception{
setArr();
boolean flag = true;
int choice = -1;
while (flag) {
System.out.println("---------------菜单--------------");
System.out.println("输入数字,选择数字进行操作");
System.out.println("1,增加");
System.out.println("2,删除");
System.out.println("3,修改");
System.out.println("4,查找");
System.out.println("5,退出");
Scanner scanner = new Scanner(System.in);
choice = scanner.nextInt();
switch (choice) {
case 1:
circle(scanner, 1);
break;
case 2:
circle(scanner, 2);
break;
case 3:
circle(scanner, 3);
break;
case 4:
circle(scanner, 4);
break;
case 5:
System.out.println("已经退出程序");
flag = false;
break;
}
}
}
private static void circle(Scanner scanner, int choice) {
//把循环执行的逻辑防在菜单类,各司其职
boolean controller = true;
while (controller) {
switch (choice) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
System.out.println("当前的数据:"+Arrays.toString(arrays.getArr()));
System.out.println("输入false退出,输入true继续");
controller = scanner.nextBoolean();
}
}