农场游戏开发第三周开始了,也是开始控制台交互部分的开发。开始觉得挺没头绪的,因为能想到菜单跳来跳去,不知道该怎么跳。后来想到一个办法,主体用while(true)控制,再每个小部分写一个独立的方法,符合条件即调用,调用完毕符合条件则返回。应该是可行的。不过实验过程遇到一个问题。一个全局Scanner对象sc在一个方法中使用,为何在switch语句中调用该方法中,sc不起作用呢。代码如下:
public class Farmgame {
private static Scanner sc;
public static void main(String[] args) {
/*
* 初始化对象
*/
Farm farm = new Farm();// 初始化农场
Farmer farmer = new Farmer();// 初始化好Farmer/Storage等类的对象
farm.setSoilArray();// 初始化农场土壤
Storage stor = new Storage();
SeedStorage seedstor = new SeedStorage();
PlantsStorage plantsstor = new PlantsStorage();
Seed sd = new Seed();// 初始化Seed类,这个对象可以被反复利用
Plants plt = new Plants();
sc = new Scanner(System.in);
int i = 0;
String str;
/*
* Welcome!
*/
System.out.println("Welcome!Farmer,begin your journey!");
//开始种植
while(true) {
System.out.println("你想去哪里?选择数字:1、农场;2、种子商店;3、建筑商店;4、卖农产品。");
test();
i = sc.nextInt();
switch(i) {
case 1:
case 2:
case 3:
case 4:test();break;
default:System.out.println("请输入合理数字");break;
}
System.out.println("ss");
// break;
}
public static void test() {
System.out.println("test");
String str;
str = sc.nextLine();
System.out.println(str);
}```
上面main方法中,第一个test()能成功调用sc.nextLine。而第二个test()则不出现这个等待录入界面。后来在test()方法中重新定义一个Scanner对象就解决了这个问题。但原理还不懂,需要去读下Scanner的类说明了。
另外附上交互界面设计流程图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020090723391578.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NhbnJlbnpoaQ==,size_16,color_FFFFFF,t_70#pic_center)