【发布时间】: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