gpt4 book ai didi

java - 使用 LinkedHashMap 到 List 时映射值不正确

转载 作者:行者123 更新时间:2023-12-02 01:15:25 25 4
gpt4 key购买 nike

我要初始化所谓的LZWDictionary,以从提供的字符串中的唯一字符集中获取一组初始条目。

当在提供的输入字符串中遇到唯一字符时,它们会被添加到映射中,索引值不断增加(从索引 0 开始)。同时,字符被添加到列表中。因此,与映射中每个字典条目关联的索引与其在列表中的索引(位置)相关。

这是我尝试的代码,其中包含对我的思考过程的评论。

// Initialising map
map = new LinkedHashMap<>();
// Initialising list
list = new ArrayList<>();
// Declaring String variable for holding character
String str;
// Declaring index variable for holding Value
int index;

// If block for checking empty string.
if (characters.length() == 0)
// Throwing IllegealArgumentException if String is empty.
throw new IllegalArgumentException("Input should not be empty!!!");
else {

// Iterating over the String
for (int i = 0; i < characters.length(); i++) {
// Taking particular character in the Iteration
str = "" + characters.charAt(i);
// Checking value of a particular character in the map
if (map.get(str) == null) {

// If not present in map, then add that to the map and list
map.put(str, 1);
list.add(str);
}

else {

index = map.get(str);
map.replace(str, index + 1);
}

}
}

我收到 java.lang.AssertionError,其中“a”的索引值在预期 <0> 的映射中不正确,但为 <5>。示例代码为:

LZWDictionary act = new LZWDictionary("ababababa");
List<String> exp = Arrays.asList("a","b");

最佳答案

已编辑@20191105:通过删除@Andreas建议的附加“int”变量来简化代码

<小时/>

因此,您的代码的问题是重复处理相同的输入字符(如果您只想计算第一次遇到的出现)。

然后,正如@Andreas所提到的,应该将代码更改如下以获得您所描述的内容:

    // Declaring index variable for holding Value
//int index = 0;

.

        // Iterating over the String
for (int i = 0; i < characters.length(); i++) {
// Taking particular character in the Iteration
str = "" + characters.charAt(i);
// Checking value of a particular character in the map

/*
* if (map.get(str) == null) {
*
* // If not present in map, then add that to the map and list map.put(str, 1);
* list.add(str); }
*
* else {
*
* index = map.get(str); map.replace(str, index + 1); }
*/
// If not present in map, then add that to the map and list map.put(str, 1);
if (map.get(str) == null) {
//map.put(str, index++);
map.put(str, map.size());
list.add(str);
}
}

// Below is just for testing what has been put to the collections ...
Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Entry<String, Integer> e = it.next();
System.out.println(e.getKey() + " ; " + e.getValue());
}

for (String a: list) {
System.out.println(a);
}

关于java - 使用 LinkedHashMap 到 List 时映射值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58695109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com