【问题标题】:Returning a HashMap in java在java中返回一个HashMap
【发布时间】:2021-02-06 14:08:58
【问题描述】:

我目前是来自 Python 的 Java 新手,我似乎无法弄清楚如何返回 HashMap,我尝试在网上搜索了几个小时,但找不到任何可以解决我的问题的东西。 这是代码。

public HashMap<Integer, Character> dataset(String text) {
    for (int i = 0; i < text.length(); i++) {
        char value = text.charAt(i);
        
        HashMap<Integer, Character> dict = new HashMap<Integer, Character>();
        dict.put(i,  value);
        System.out.println(dict.getClass().getSimpleName());

        return dict; // Here's the error
    }
}


public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter text: ");
    String text = sc.next();
    
    System.out.println("============================");
    
    System.out.println("1. Convert to uppercase");
    System.out.println("2. Conver to lowercase");
    System.out.println("3. Convert to a dataset");
    System.out.print("Enter selection:  ");
    String choice = sc.next();
    
    StringConverter obj = new StringConverter();
    
    switch(choice) {
    case "1":
        text = obj.upperCase(text);
        System.out.println("=====Converted to uppercase=====");
        System.out.println(text);
        break;
        
        
    case "2":
        text = obj.lowerCase(text);
        System.out.println("=====Converted to lowercase=====");
        System.out.println(text);
        break;
        
    case "3":
        obj.dataset(text);

        break;
        
    }
}

我什至仔细检查了我返回的变量是否是 HashMap。

这是个例外。

线程“main”java.lang.Error 中的异常:未解决的编译问题: 此方法必须返回 HashMap

类型的结果

我知道这可能是一个新手错误,但经过数小时的研究我找不到任何有用的东西。

【问题讨论】:

  • 你从一个循环中返回,并且不允许语法only从一个块返回,因为你的循环可能根本不会运行。例如,如果输入参数的大小为 0 怎么办?而是从方法返回。相应地,在方法级别定义您的 dict 循环外。
  • 不要运行不能编译的代码!错误消息很清楚:您的方法dataset 必须为每种可能的方式返回一些内容。如果text.length() 为零,则循环不会运行。在这种情况下应该返回什么值?
  • @GiorgiTsiklauri 允许从 for 循环中返回(尽管在此示例中这样做可能是错误的,就像在循环中创建地图一样)。问题是编译器不够聪明,无法评估循环条件,所以它还需要在循环之后返回一些东西。
  • @MarkRotteveel 很好,只要考虑到所有可能的结果。编译器足够聪明地认为,这里唯一可能的 return 变化对于动态输入是不合适的,因为该行可能永远不会执行。因此,您必须以某种方式对方法进行编码,即忽略路径执行可能会导致您的方法返回..或抛出异常。我认为我的评论提到..虽然如果有点模糊,我会以这种方式澄清它:如果所有可能的输入都被覆盖,那么你可以返回从您希望的任何方法块;否则你将冒返回的风险。

标签: java string hashmap return


【解决方案1】:

dictreturn 语句的定义移出循环,应该没问题(进入前的第一个,退出循环后的最后一个)。

在您当前的代码中,不能保证 return 语句是可访问的(即,如果您的循环甚至没有进入),必须在非 void 函数中给出。

此外,您的方法将在每次假设迭代中调用return,这意味着您的方法将始终以第一次迭代结束。 return 会导致函数退出,无论之后发生什么,这意味着您的代码将无法按预期工作。此外,您将创建多个 HashMap,因为每次迭代调用一次构造函数。

public HashMap<Integer, Character> dataset(String text) {

    HashMap<Integer, Character> dict = new HashMap<Integer, Character>();

    for (int i = 0; i < text.length(); i++) {
        char value = text.charAt(i);
        dict.put(i,  value);
        System.out.println(dict.getClass().getSimpleName());
    }

    return dict; // Here's the error
}

【讨论】:

  • 我真的不敢相信我在 for 循环中定义了我的变量,并且还在循环中添加了 return 语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 2011-08-02
  • 2018-05-20
  • 1970-01-01
相关资源
最近更新 更多