Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按2个字符映射字符数组2_Java_Hashmap_Linkedhashmap - Fatal编程技术网

Java 按2个字符映射字符数组2

Java 按2个字符映射字符数组2,java,hashmap,linkedhashmap,Java,Hashmap,Linkedhashmap,我有一个类似于xxyyxyxxxzxzzxxxyxx的字符数组,我想将它映射到LinkedHashMap,如下所示: public LinkedHashMap<String, Integer> convert(char[] array) { LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>(); int[] freq = new int[array

我有一个类似于xxyyxyxxxzxzzxxxyxx的字符数组,我想将它映射到LinkedHashMap,如下所示:

public LinkedHashMap<String, Integer> convert(char[] array) {

    LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();

    int[] freq = new int[array.length];
    int i, j;

    for (i = 0; i < array.length; i+=2) {
        freq[i] = 1;
        for (j = i + 2; j < array.length; j+=2) {
            if (array[i] + array[i+1] == array[j] + array[j+1]) {
                freq[i]++;
                array[j] = '0'; //flag to check if it is already printed
                array[j+1] = '0'; //flag to check if it is already printed
            }
        }
    }

    for (i = 0; i < freq.length; i+=2) {
        if (array[i] + array[i+1] != ' ' && array[i] != '0') {                
            String dublex = ""+ array[i] + array[i+1];
            hmap.put(dublex, freq[i]);
        }
    }
    return hmap;
}
公共LinkedHashMap转换(字符[]数组){ LinkedHashMap=新建LinkedHashMap(); int[]freq=新的int[array.length]; int i,j; 对于(i=0;i 正常情况下,它应设置以下值: XX:2 YY:1 XY:3 XZ:3

但它指定了以下值: XX:2 YY:4 XY:3 XZ:?不可用

我对以下几行和几点表示怀疑:

1) 我尝试对count freq[]变量使用另一个循环值,如“k”,并尝试在0-9之间对其进行计数,因为18个元素是9个两个字符的元素:我尝试这样做,但没有意义,并引发异常

2) “0”部分添加到值的末尾:我尝试添加单独的0值并单独检查,例如
array[I]!='0'&数组[i+1]!='0'


那么,如何解决这个问题呢?

这只是对sc0der的重新表述,是应十六进制的要求发布的

    public static LinkedHashMap<String, Integer> convert(char[] array) {
        LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();

        for (int i = 0; i < array.length - 1; i += 2) {
            map.put(array[i] + "" + array[i + 1], map.getOrDefault(array[i] + "" + array[i + 1], 0) + 1);
        }

        return map;
    }

    public static void main(String[] args) {
        System.out.println(convert("XXYYXYXYXZXZXZXYXX".toCharArray()));
    }
static Map<String, Integer> pairFreq(char[] array)
{
    LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
    for(int i=0; i<array.length; i+=2)
    {
        String key = new String(array, i, 2);
        map.put(key, 1 + map.getOrDefault(key, 0));
    }
    return map;
}

难以置信,只用了一半的代码行!非常感谢:)是的,回答得很好。您可以使用
newstring(array,i,2)
而不是
array[i]+“”+array[i+1]
。另外,循环条件的
可以是
i
,但结果是一样的。@SirRaffleBuffle您能把它作为答案发布吗?通过这样做,这个问题和答案帮助了更多的人;)提前谢谢。@SirRaffleBuffle我也试过你的方法,是的,它更干净,不会改变结果。如果你还有别的建议,我很乐意听你的。谢谢
static Map<String, Integer> pairFreq(char[] array)
{
    LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
    for(int i=0; i<array.length; i+=2)
    {
        String key = new String(array, i, 2);
        map.put(key, 1 + map.getOrDefault(key, 0));
    }
    return map;
}
String str = "XXYYXYXYXZXZXZXYXX";
Map<String, Integer> map = pairFreq(str.toCharArray());
for(String pair : map.keySet())
    System.out.println(pair + " : " + map.get(pair));
XX : 2
YY : 1
XY : 3
XZ : 3