Java 使用LinkedHashMap到列表时映射值不正确
我将初始化所谓的Java 使用LinkedHashMap到列表时映射值不正确,java,Java,我将初始化所谓的LZWDictionary,以从提供的字符串中的唯一字符集中获取一组初始条目 在提供的输入字符串中遇到唯一字符时,会将其添加到映射中,索引值会增加(从索引0开始)。同时,字符被添加到列表中。因此,与地图中每个词典条目相关联的索引与它们在列表中的索引(位置)相关 下面是我在思考过程中使用注释尝试的代码 // Initialising map map = new LinkedHashMap<>(); // Initialising list list = new Arra
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);
}
}
}
//初始化映射
map=newlinkedhashmap();
//初始化列表
列表=新的ArrayList();
//声明用于保存字符的字符串变量
字符串str;
//声明用于保存值的索引变量
整数指数;
//用于检查空字符串的If块。
if(characters.length()==0)
//如果字符串为空,则抛出IllegealArgumentException。
抛出新的IllegalArgumentException(“输入不应为空!!!”;
否则{
//在字符串上迭代
对于(int i=0;i
我得到了一个java.lang.AssertionError,其中“a”的索引值在映射中不正确,但在映射中是正确的。示例代码是:
LZWDictionary act = new LZWDictionary("ababababa");
List<String> exp = Arrays.asList("a","b");
LZWDictionary法案=新的LZWDictionary(“ababababa”);
List exp=Arrays.asList(“a”、“b”);
这部分代码与您描述的完全不同:
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);
}
您希望输入“ababababa”
返回一个列表[a,b]
,即唯一字符,以及一个带有{a:0,b:1}
的映射,对吗?并且输入“aaaabbbbbbbb”
应该给出相同的结果,对吗
因此,结果列表和结果映射只会在看到字符时第一次更新,对吗
这意味着上面的代码不应该有else
子句。摆脱它
此外,地图应该具有唯一字符的索引。但是你有map.put(str,1)
。他们不可能都在指数1,是吗
重新思考你在做什么。这部分代码根本不是你所描述的:
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);
}
您希望输入“ababababa”
返回一个列表[a,b]
,即唯一字符,以及一个带有{a:0,b:1}
的映射,对吗?并且输入“aaaabbbbbbbb”
应该给出相同的结果,对吗
因此,结果列表和结果映射只会在看到字符时第一次更新,对吗
这意味着上面的代码不应该有else
子句。摆脱它
此外,地图应该具有唯一字符的索引。但是你有map.put(str,1)
。他们不可能都在指数1,是吗
重新思考你在做什么。编辑了@20191105:删除了@Andreas建议的额外“int”变量,从而简化了代码
因此,代码的问题是对相同输入字符的重复处理(如果您只想计算第一次遇到的外观) 然后,正如@Andreas所提到的,为了获得您所描述的内容,代码应该按如下所示进行更改:
// Declaring index variable for holding Value
//int index = 0;
//在字符串上迭代
对于(int i=0;i
编辑@20191105:按照@Andreas的建议,通过删除额外的“int”变量简化了代码
因此,代码的问题是对相同输入字符的重复处理(如果您只想计算第一次遇到的外观) 然后,正如@Andreas所提到的,为了获得您所描述的内容,代码应该按如下所示进行更改:
// Declaring index variable for holding Value
//int index = 0;
//在字符串上迭代
对于(int i=0;i