【问题标题】:misplaced token error java in helper methods辅助方法中的错误标记错误java
【发布时间】:2012-03-13 03:12:30
【问题描述】:

我正在编写一个作为学生成绩单的类,我创建了一个将添加课程的辅助实例方法,我通过 HashMap 实现了成绩单类,课程名称是关键,成绩是它的值。当我尝试测试我的班级时,我在使用添加课程方法仅添加课程名称而没有成绩时收到错误,我收到此错误

此行有多个标记 - 标记 ""CS200"" 的语法错误,删除此标记 - 标记的语法错误,错误的构造

当我使用与课程名称相同的方法时,我得到了这个错误

此行有多个标记 - 标记的语法错误,删除这些标记 - 标记的语法错误,错误的构造

我很确定我的代码是正确的,但我不知道我哪里出错了,我在这里写的代码:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Transcript
{
    private Map<String, Double> transcript;
    private String transcriptInString = "";

    public Transcript ()
    {
        transcript = new HashMap<String, Double> (30);
    }

    /* ---------------------------------------------- Helper Methods ---------------------------------------------- */

    public void addCourse (String courseName, double grade)
    {
        transcript.put(courseName, grade);
    }

    public void addCourse (String courseName)
    {
        addCourse(courseName, 0.0);
    }

    public String toString ()
    {
        Set<String> transcriptKeys = transcript.keySet();
        Iterator<String> keyIterator = transcriptKeys.iterator();
        String courseName;

        while (keyIterator.hasNext())
        {
            courseName = keyIterator.next();
            transcriptInString += courseName + "\t" + transcript.get(courseName) + "\n";
        }

        return transcriptInString;
    }
}

这是我编写的驱动程序类,用于检查我的代码是否给了我正确的结果

public class Driver
{
    Transcript t = new Transcript ();
    t.addCourse("CS200", 100);
}

感谢大家的帮助

【问题讨论】:

    标签: java class map hashmap


    【解决方案1】:

    看看你的Driver类:

    public class Driver
    {
        Transcript t = new Transcript ();
        t.addCourse("CS200", 100);
    }
    

    您的第一行没问题 - 它声明了一个变量。但是第二条语句只是试图执行一个方法——但它不在方法、构造函数、初始化块等的上下文中。

    你可以把它放在构造函数中:

    public class Driver
    {
        public Driver()
        {
            Transcript t = new Transcript ();
            t.addCourse("CS200", 100);
        }
    }
    

    或者可能是一种方法:

    public class Driver
    {
        public void test()
        {
            Transcript t = new Transcript ();
            t.addCourse("CS200", 100);
        }
    }
    

    目前还不清楚Driver 的用途,但它不能只在类中包含这样的语句。

    【讨论】:

    • 驱动类只是给我的类放几个测试用例来检查结果是否正确不多,但我仍然不明白为什么它不起作用
    • 哦,哈哈,我在这里犯了一个 gd 错误,我没有在我的驱动程序类中编写 main 方法,没关系,无论如何感谢您的帮助
    【解决方案2】:

    声明t.addCourse("CS200", 100); 不允许在类的声明部分。将它移到其他地方(例如在构造函数中) 所以不要有:

    public class Driver
    {
        Transcript t = new Transcript ();
        t.addCourse("CS200", 100);
    }
    

    你应该有:

    public class Driver
    {
        Transcript t = new Transcript ();
        public Driver(){
            t.addCourse("CS200", 100);
        }
    }
    

    如果您想让所有内容都保持静态,您可以执行以下操作

    public class Driver
    {
        static Transcript t = new Transcript ();
        static{
            t.addCourse("CS200", 100);
        }
    }
    

    【讨论】:

    • 为什么不允许这样声明?
    • 哦,哈哈,我在这里犯了一个 gd 错误,我没有在我的驱动程序类中编写 main 方法,没关系,无论如何感谢您的帮助
    • 我有一个关于这篇文章的问题,在写静态和两个花括号时,里面的所有内容都是私有的吗?如果没有,有办法将其设为私有吗?
    • @aizen92 当不存在访问修饰符时,任何没有声明访问修饰符的类、字段、方法或构造函数只能由同一包中的类访问
    【解决方案3】:

    你需要把Driver类里面的代码放到一个方法中(可能是main方法?)。

    例子:

    public class Driver {
        public static void main(String[] args) {
            Transcript t = new Transcript ();
            t.addCourse("CS200", 100);
        }
    }
    

    【讨论】:

    • 哦,哈哈,我在这里犯了一个 gd 错误,我没有在我的驱动程序类中编写 main 方法,没关系,无论如何感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2013-05-20
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多