为什么我不能从多维数组中打印字符串?

时间:2019-08-16 11:54:44

标签: java string eclipse multidimensional-array

我读过其他文章,而不是只写System.out.println(finalPressedKey);  您应该写System.out.println(Arrays.toString((finalPressedKey));,因为否则它只会返回保存字符串的位置(据我所知)。

public static String PressedKey[] = new String[2000];

public static String[][] finalPressedKey = {{ "", "", "", "", "", "", "", "", "", "", "", "" }}; // 12

public static String FPK3;

public static void upcounter(KeyEvent e) {

    for (int x = 0; x < PressedKey.length; x++) {

        if (PressedKey[x] != null && PressedKey[x + counter] != null) {

        //FPK counter is supposed to be a line, and counter is where the words are supposed to be saved

        finalPressedKey[FPKcounter][counter] =
        finalPressedKey[FPKcounter] + PressedKey[x + counter];

            System.out.println(Arrays.toString(finalPressedKey));
        }

    }

每当我按下一个按钮时,都应将其保存在我的PressedKey数组中,并且finalPressedKey应该包含它自己,并且PressedKey(也应该仅是数组的最后一个元素是打印),但只打印[[Ljava.lang.String;@76f42c4b]

我也尝试使用Arrays.deepToString();,但它给我的输出与Arrays.toString();相同

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

String[][]不是二维数组。它是String[]的数组。差异虽然微妙但很重要。

方法Arrays.toString()接受一个数组,遍历其元素,对所有元素调用toString(),并添加前缀,后缀和定界符。由于您给它一个String[][]String[]的数组),它将执行以下操作:

  • 遍历元素(每个元素String[]
  • 在每个元素上调用toString()-给出数组的默认toString()值-即它的内存地址(不是真的,但这并不重要)
  • 连接

幸运的是,有一种更简单的方法-只需使用Arrays.deepToString()。行为符合您的预期。

答案 1 :(得分:1)

我不了解整个代码,但是以下声明非常可疑:

finalPressedKey[FPKcounter][counter] =
finalPressedKey[FPKcounter] + PressedKey[x + counter];

因为它将字符串(finalPressedKey[...])添加到字符串(PressedKey[...]),这将导致 strange 文本-数组的标准文本表示形式(由toString返回)。 (从数学角度来看,有2个索引很奇怪)2D_在赋值之前,而在同一矩阵的右侧(1D)只有一个)

我不确定,因为我们看不到counter是什么,但是我相信您想要这样的东西:

finalPressedKey[FPKcounter][counter] =
finalPressedKey[FPKcounter][counter] + PressedKey[x + counter];

,即第二行中的附加[counter]

这也可以写为

finalPressedKey[FPKcounter][counter] += PressedKey[x + counter];

答案 2 :(得分:0)

您必须使用

打印数组的元素
for(int i = 0; i<finalPressedKey[0].length; i++){
   for(int j=0; j<finalPressedKey[1].length; j++){
      System.out.println(finalPressedKey[i][j]);
   } 
}

如果我理解正确的话。

答案 3 :(得分:0)

如果您只想存储字符串行,那么普通的String []对您来说是有益的

finalPressedKey[FPKcounter] += PressedKey[x + counter];

即使我不建议这样做,无论您要完成什么,因为每次按下一个键都会创建一个新的String对象。

也许您会提出不同的问题,然后告诉我们您要做什么。我猜想String数组可能不是走的路。