我是Groovy的新手,没有Java的实践经验。任何人都可以在下面的代码中回答我的天真问题。
class StudentMap {
def student_map=new HashMap<String,String>()
def answer=System.console().readLine 'Do you want to add a student Y/N\n'
while (answer=='Y') {
get_student()
answer=System.console().readLine 'Do you want to continue Y/N\n'
}
def add_student(String name,String age)
{
student_map << ["${name}":"${age}"]
}
def get_student()
{
def name=System.console().readLine 'What is your name\n'
def age=System.console().readLine 'What is your age\n'
add_student(name,age)
}
print student_map
}
def Student_Map = new StudentMap()
我收到以下错误
1编译错误:
意外令牌:在第7行,第5列:
我查了一下括号,但看起来很好。谁能告诉我这个代码中的错误是什么。 我只是想每次创建一个HashMap并存储学生的信息,如年龄和名字 基本上,当我运行这个时,我想创建一个学生信息的HashMap并打印出来。
也可以有人建议任何提供从初学者到专家的Groovy示例的好站点,因为我在网上找到的大部分结果都是java程序员友好的。
提前致谢
*****这个答案包含2个更新*****
更新1
感谢Nathan的回复。以下是我最初为实现以下目的而编写的代码:: 1.每次运行代码时创建学生的Hashmap 2.要求用户输入学生信息3.不再需要学生将被添加显示HashMap
我的代码没有使用类
answer=System.console().readLine 'Do you want to add a student Y/N\n'
while (answer=='Y') {
get_student()
answer=System.console().readLine 'Do you want to continue Y/N\n'
}
def add_student(String name,String age)
{
def student_map=new HashMap<String,String>()
student_map << ["${name}":"${age}"]
}
def get_student()
{
def name=System.console().readLine 'What is your name\n'
def age=System.console().readLine 'What is your age\n'
add_student(name,age)
}
除了显示,这应该不是一个大问题,这个代码运行正常,但我想它为我不想要的每个学生条目创建一个HashMap。如果我在add_student函数之外声明def student_map = new HashMap(),则该函数无法引用它。这就是我想创建一个Student类的原因所以每当我通过def Student_Map = new StudentMap()创建类student_map的对象时,它会创建一个Student_map对象,其属性是HashMap student_map,它可以有两个动作
1.通过get_student()函数获取用户的学生信息。 2.使用add_student(String name,String age)函数将学生信息添加到student_map HashMap中。
当不再需要添加时,显示HashMap student_map的内容。
如果我的理解和实施是正确和有效的,请告诉我。
相同的更新2:
我尝试运行代码,因为将while和print打印在一个方法main()中,编译很好,但仍然没有逻辑正确,似乎每当我运行它执行的代码并且不要求用户输入。
下面是我试图运行的更新代码,以实现我在本文的上述更新中提到的内容。
class StudentMap {
void main(String[] args) {
answer=System.console().readLine 'Do you want to add a student Y/N\n'
def student_map=new HashMap<String,String>()
while (answer=='Y') {
get_student()
answer=System.console().readLine 'Do you want to continueY/N\n'
}
}
def add_student(String name,String age) {
student_map << ["${name}":"${age}"]
}
def get_student()
{
def name=System.console().readLine 'What is your name\n'
def age=System.console().readLine 'What is your age\n'
add_student(name,age)
}
} def Student_Map = new StudentMap()
结果:StudentMap @ 7e54423
我删除了void main函数中的static,因为它给了我以下错误。
在静态范围内找到了表观变量'answer',但没有引用局部变量,静态字段或类。可能的原因:您试图引用绑定中的变量或静态上下文中的实例变量。您错误拼写了一个类名或静态导入的字段。请检查拼写。您试图使用方法“回答”,但在语法不允许的位置省略括号。
没有static关键字,我的代码编译得很好。我想我的对象正在被创建,但是没有按照我想要的方式行事。
有谁能告诉我我哪里出错了。
答案 0 :(得分:2)
问题在于您的while
循环和print student_map
语句,它们不在任何方法之内。
因此,如果你想执行while并打印,请将它们放在main
方法中:
class StudentMap {
...
//something like
static void main(String[] args) {
while (answer=='Y') {
get_student()
answer=System.console().readLine 'Do you want to continueY/N\n'
}
print student_map
}
}
Groovy是一种脚本语言,因此您不需要将代码放在类中。其他选项是从脚本中删除类声明。