将 char 2d 数组转换为 2d char 数组列表时出现问题

Posted

技术标签:

【中文标题】将 char 2d 数组转换为 2d char 数组列表时出现问题【英文标题】:Having problems converting a char 2d array to a 2d char array list 【发布时间】:2022-01-18 07:59:33 【问题描述】:

好的,我一直在编写代码以获取双字符数组并将其转换为双数组列表,到目前为止,我一直在使用两个 for 循环来实现这一点,将每个数组的字符添加到双数组到数组列表,然后将其添加回双数组列表。下面是我的转换器的代码:

public static ArrayList<ArrayList<Character>> CharAToAL(char[][] chars)
        ArrayList<ArrayList<Character>> c = new ArrayList<>();
        ArrayList<Character> b = new ArrayList<>();

        for(int i=0; i < chars.length; i++)
            b.clear();
            for (int k=0; k < chars[i].length; k++)
                b.add(Character.valueOf(chars[i][k]));
//this part of code prints out the correct letters
                Debug.printLn(String.valueOf(chars[i][k]));
            
            c.add(b);
        
        return c;
     

我正在使用以下代码对其进行测试:

//static obj outside of main
    static char[][] gamemenu = 
            '0','1','0','0','0','0','0','0','0','0',
            '0','0','0','0','0','0','0','0','0','0',
            '0','0','0','0','@','0','0','0','0','0',
            '0','0','0','0','0','0','0','0','0','0',
            '0','0','0','0','0','0','0','0','0','0'
    ;
//inside of main
    ArrayList<ArrayList<Character>> e = Utility.CharAToAL(gamemenu);
    Debug.PrintDoubleArray(gamemenu);
    Debug.printLn("\n-------");
    Debug.PrintDoubleArray(e);
    Debug.printLn("\n-------");
    Debug.printLn(String.valueOf(e.get(0).get(1)));

Debug 只是一个帮助打印值的小脚本。我希望看到的是游戏菜单,但是,它只打印零,如下图所示,上面的破折号是预期的,下面是输出的。

Picture of the printout

我认为这可能是由于清除 b 但不这样做会导致相同的事情一遍又一遍地重复。先感谢您! :>

【问题讨论】:

【参考方案1】:

b不需要在循环外声明

for(int i=0; i < chars.length; i++)
    ArrayList<Character> b = new ArrayList<>();
    for (int k=0; k < chars[i].length; k++)
        Character ch = Character.valueOf(chars[i][k]);
        b.add(ch);
        //this part of code prints out the correct letters
        System.out.println(ch);
     
    c.add(b);

当您执行clear 时,它会从列表中删除所有内容,并且由于您没有创建新列表,因此之前添加的值也会丢失。

【讨论】:

以上是关于将 char 2d 数组转换为 2d char 数组列表时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

将数组作为 void 指针发送时,在 c 中使用 puts 输出 2d char 数组时出错

打印 char 2D 数组时初始化程序太多

在C中操作动态分配的2D char数组

如何使用指针从2D char数组中生成一个句子

使用 2D 字符数组时将数组作为指针

2D char Array 和 char** 之间的区别(OR、3D char Array 和 char*** 等)