好的,所以我有一个澄清,因为这个问题有点误导! - 我知道如何创建菜单,列出选项并提示输入,阅读用户的输入等。
我遇到的问题纯粹是合乎逻辑的。我需要创建一个包含3个选项的主菜单:
创建具有关联属性的学生“对象”数组
- 搜索列表
-exit
此时,我有布尔操作的while循环,激活“子菜单”。根据他们是否想要创建列表,搜索等,布尔值变为真或假。
(重要的是要知道,我有一个上面的类(学生),其中包含数组的所有属性,如名称,平均成绩等。)我的主程序的总体布局如下:
while(bMainMenu)
{
boolean bList = false;
boolean bSearch = false;
[all the code prompting choices]
-if input is "create" then bList = true;
-if input is "search" then bSearch = true;
-if input is "exit" then bMainMenu = false;
while(bList)
{
[all the code that creates the array and prompts for student info
where the array is as long as the user chooses]
bList = false;
}
while (bSearch)
{
[all the code for searching the array]
bSearch = false;
}
}
创建列表后,其他所有内容都为false,并重新循环主菜单。这一次,用户说“搜索”,它使搜索菜单的布尔值为真。
我遇到的问题:引用刚创建的数组。我想知道我需要调用它的地方。据我所知,我刚刚完成所有操作的方式使得数组只包含在“bList循环”中。
我在哪里调用数组使其“可见”到“bSearch”循环?或者我是否需要以不同方式重组一切?
提前致谢!
答案 0 :(得分:1)
这完全是关于范围的。类似于如何在主外循环中的任何位置访问布尔变量bList
和bSearch
:while(bMainMenu)
,您可以类似地声明您的学生数组:
while(bMainMenu) {
Student[] students;
boolean bList = false;
boolean bSearch = false;
// Remaining code can now access students array as it is in scope
}
然后,您稍后将实例化您的数组,例如:students = new Student[numberStudents]
。
如果您不知道将提前创建多少学生,或者它是否会继续增加,请考虑使用ArrayList<Student>
。
答案 1 :(得分:1)
bMainMenu = true;
List<StudentInfo> students = new ArrayList<StudentInfo>();
while(bMainMenu){
boolean bList = false;
boolean bSearch = false;
[all the code prompting choices]
-if input is "create" then bList = true;
-if input is "search" then bSearch = true;
-if input is "exit" then bMainMenu = false;
while(bList){
[all the code that creates the array and prompts for student info
where the array is as long as the user chooses]
// Build this student info object based on user parameters
StudentInfo studentInfo = new StudentInfo(name, class);
students.add(studentInfo);
}
while(bSearch){
/*
Play with "students" arraylist. It is accessible here and contains all studentinfo details added before.
*/
}
}