【问题标题】:Working with TreeMaps (21.9- Intro to Java, Liang, 10th Edition)使用 TreeMaps (21.9- Intro to Java, Liang, 10th Edition)
【发布时间】:2015-06-03 04:58:57
【问题描述】:

我应该编写一个程序,使用 TreeMaps 返回美国给定州的首府。但是,当我运行该程序时,它甚至在我有机会输入任何内容之前返回 null。谁能告诉我怎么了?

public class Map {

  private TreeMap<String, String> pairs;

  public Map() {
    pairs = new TreeMap<String, String>();
  }

  public void readFrom(String fileName) {
    Scanner input = null;
    try {
        input = new Scanner(new File(fileName));
    } catch (Exception ex) {
        ex.printStackTrace();
        System.exit(-1);
    }

    while (input.hasNext(" , ")) {
        pairs.put(input.next(), input.next());
    }
  }

  public String get(String key) {
    return pairs.get(key);
  }

}

public static void main(String[] args) {

    Map USA = new Map();
    USA.readFrom("states_and_capitals.txt");

    System.out.print("Enter a state: ");
    Scanner input = new Scanner(System.in);
    System.out.println(USA.get(input.toString()));
}

程序读取的文本文件“states_and_capitals.txt”的格式设置为在每一行都有一个州及其大写字母,用逗号分隔(无空格),如下所示:

阿拉巴马州,蒙哥马利

阿拉斯加,朱诺

亚利桑那州,凤凰城

等等

【问题讨论】:

  • input.toString() 返回的不是您的想法,而是input 的字符串表示形式。您可以改用input.nextLine()
  • 你应该把主要方法放在类Map中吗?另外我会将其重命名为MyMap,以免与java.util.Map混淆。
  • @mazaneicha 谢谢,这是一个很好的观点——现在我至少可以在它返回 null 之前输入一个输入。但是,在我输入输入并输入后,它仍然返回 null。
  • @MaxZoom 我尝试将 main 方法放入 Map 类,但这似乎没有任何作用。

标签: java debugging treemap


【解决方案1】:

检查一下,我修复了您从文本文件中读取并填充 TreeMap 的部分。我测试过并且工作正常。

public class Map {

    private TreeMap<String, String> pairs;

    public Map() {
        pairs = new TreeMap<String, String>();
    }

    public void readFrom(String fileName) {
        try {
            Scanner input = new Scanner(new File(fileName));
            while (input.hasNextLine()) {
                String [] parts = input.nextLine().split(",");
                if (parts.length == 2)
                    pairs.put(parts[0], parts[1]);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            System.exit(-1);
        }
    }

    public String get(String key) {
        return pairs.get(key);
    }

    public static void main(String[] args) {
        Map USA = new Map();
        USA.readFrom("states_and_capitals.txt");

        System.out.print("Enter a state: ");
        Scanner input = new Scanner(System.in);
        System.out.println(USA.get(input.nextLine()));
    }
}

【讨论】:

    【解决方案2】:

    要使用扫描仪读取字符串输入,您应该在下面使用

    scanner.nextLine();
    

    所以在你的代码中你应该这样做

    System.out.print("Enter a state: ");
    Scanner input = new Scanner(System.in);
    String stateName=input.nextLine();
    System.out.println(USA.get(stateName));
    

    在将输入作为 statename 后使用 Enter

    【讨论】:

    • 谢谢,我这样做了,但是在我输入 stateName 后它仍然返回 null。我认为我的代码的其他部分一定有问题。
    • @Asker 也许你的地图没有填充...检查while循环是否工作正常...
    • 我不确定它是否有效——我的想法是 hasNext 会检查更多的术语,如果它不在列表的末尾,它将继续向地图添加更多的术语.这是正确的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多