Java I';我无法获得输出

Java I';我无法获得输出,java,Java,每个不同的第一个字符都有一个键,所有以该字符开头的字符串的值都按照它们在数组中出现的顺序附加在一起 输入: (["salt", "tea", "soda", "toast"]) 输出: {"s": "saltsoda", "t": "teatoast"} {s=saltsoda, t=teatoast} {s=saltsoda, t

每个不同的第一个字符都有一个键,所有以该字符开头的字符串的值都按照它们在数组中出现的顺序附加在一起

输入:

(["salt", "tea", "soda", "toast"])
输出:

{"s": "saltsoda", "t": "teatoast"}
{s=saltsoda, t=teatoast}
{s=saltsoda, t=teatoast}
Map Map=newhashmap();
字符串结果=”;
用于(字符串s:字符串){
if(map.containsKey(s.substring(0,1))){
结果=结果+s;
map.put(s.substring(0,1),result);
}否则{
map.put(s.substring(0,1),s);
}
} 
返回图;

通过您展示的更新代码,您就快到了。您仍然缺少的是,在已经找到键时追加
字符串
s。在您的代码行中

result = result + s;
实际上应该是:

result = map.get(s.substring(0,1)) + s;
另外,不要忘记为每个循环迭代重置
结果
,正如注释中指出的那样

以下是一个工作示例:

public static void main(String[] args) {
    String[] input = { "salt", "tea", "soda", "toast" };
    Map<String, String> output = new HashMap<>();
    for (String s : input) {
        String first = s.substring(0, 1);
        if (output.containsKey(first)) {
            output.put(first, output.get(first) + s);
        } else {
            output.put(first, s);
        }
    }
    System.out.println(output);
}
或者更好,使用
字符
作为键,而不是
字符串

public static void main(String[] args) {
    String[] input = { "salt", "tea", "soda", "toast" };
    Map<Character, String> output = new HashMap<>();
    for (String s : input) {
        char c = s.charAt(0);
        if (output.containsKey(c)) {
            output.put(c, output.get(c) + s);
        } else {
            output.put(c, s);
        }
    }
    System.out.println(output);
}
或者您也可以使用Java8 Streams来完成这项工作:

public static void main(String[] args) {
    String[] input = { "salt", "tea", "soda", "toast" };
    Map<Character, String> output = 
            Stream.of(input) // create stream of the strings
                .collect(Collectors.toMap( // collect
                    k -> k.charAt(0),      // key should be first char
                    v -> v,                // value should be the string
                    (s1, s2) -> {          // mergeFunction, in case the key exists
                         return s1 + s2;   // then append the strings
                    }
            ));
    System.out.println(output);
}
publicstaticvoidmain(字符串[]args){
字符串[]输入={“盐”、“茶”、“苏打”、“吐司”};
映射输出=
Stream.of(input)//创建字符串流
.collect(收集器.toMap(//collect
k->k.charAt(0),//键应该是第一个字符
v->v,//值应为字符串
(s1,s2)->{//merge函数,如果键存在
返回s1+s2;//然后追加字符串
}
));
系统输出打印项次(输出);
}

“我无法获得输出”-您获得的是什么输出?你的逻辑似乎错了。此任务最多需要一个循环。另外,你能解释一下为什么你的循环是这样构造的吗?我要做的是:1)在输入上循环一次2)在这个循环中,检查
映射
是否已经包含当前第一个字符的键3),然后将
字符串
附加到找到的键值中,或者添加新的键值对。要附加,我们必须在整个数组中存储第一个出现的字符串和第二个循环,实际上没有。请看我在评论中描述的步骤。请不要在评论中添加代码。正如你所看到的,它看起来并不太好。相反,您的问题是,如果相关的话,在那里添加代码。
result
永远不会在循环之间重置。它应该是当前在映射中找到的值,如果不是,则为空字符串。目前,您只需继续添加到
结果
变量非常感谢…已解决谢谢。。。
public static void main(String[] args) {
    String[] input = { "salt", "tea", "soda", "toast" };
    Map<Character, String> output = 
            Stream.of(input) // create stream of the strings
                .collect(Collectors.toMap( // collect
                    k -> k.charAt(0),      // key should be first char
                    v -> v,                // value should be the string
                    (s1, s2) -> {          // mergeFunction, in case the key exists
                         return s1 + s2;   // then append the strings
                    }
            ));
    System.out.println(output);
}