意外的令牌:在线时:

时间:2015-03-27 14:12:18

标签: groovy

我是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关键字,我的代码编译得很好。我想我的对象正在被创建,但是没有按照我想要的方式行事。

有谁能告诉我我哪里出错了。

1 个答案:

答案 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是一种脚本语言,因此您不需要将代码放在类中。其他选项是从脚本中删除类声明。

Groovy参考:http://groovy-lang.org/documentation.html