2017-03-16 111 views
2

所以我只是在这里玩弄一个二维字符串数组,并希望看到如果我只打印出我的实际数组的行维度,我的输出变化。以下是我的代码与奇怪的输出。Java多维字符串给出一个奇怪的输出

public class TwoDimensionalArrays { 
    public static void main(String[] args) { 

     String[][] words = { { "Hello", "Mr.", "Spencer!" }, { "How", "Are", "You", "Doing", "Today?" }, 
       { "I", "recommend", "an", "outdoor", "activity", "for", "this", "evening." } 

     }; 
for (int m = 0; m < words.length; m++) { 
      for (int n = 0; n < words[m].length; n++) { 
       System.out.println(words[m]); 
      } 
     } 

    } 

输出:

[Ljava.lang.String;@7852e922 
[Ljava.lang.String;@7852e922 
[Ljava.lang.String;@7852e922 
[Ljava.lang.String;@4e25154f 
[Ljava.lang.String;@4e25154f 
+0

Java正在打印出字符串数组引用。 – yters

+1

可能的重复[如何打印我的Java对象而不会得到“SomeType @ 2f92e0f4”?](http://stackoverflow.com/questions/29140402/how-do-i-print-my-java-object-without-越来越-sometype2f92e0f4) – Joe

回答

3

你看到什么在这里,由@yters指出,对数组引用。请记住,在每个数组中,现在有另一个数组(因为它是一个二维数组)。所以你的words[0]的结果将是["Hello","Mr.","Spencer!"]

当您在Java中执行打印语句时,您正在依靠对象toString()方法为您提供正确的信息。在这种情况下,您正在执行此操作的对象的类型为String[],因此为Array。在数组上运行toString()时,您将获得打印出的对象引用,这是您获得的结果。 (例如:[Ljava.lang.String;@135fbaa4 )。

,你可以做些什么来打印阵列是这样写代码:

for (int m = 0; m < words.length; m++) { 
     System.out.println(Arrays.toString(words[m])); 
    } 

通过使用数组的Util类,你可以打印二维数组一样,里面的每个阵列。

+0

他已经有两个循环完成了,所以使用'words [m] [n]'也可以;) – AxelH

+1

@AxelH是的,但OP说:“如果我只打印出行维度。所以在我的解释中,他想要为m的每个索引拥有完整的数组,而无需迭代索引n。他也没有使用N,所以我认为他并不真正了解他在做什么。 但当然,你的观点是有效的,只是对我想问题的解释的差异:-) –

0

或者你也可以行System.out.println(words[m]);更改为System.out.println(words[m][n]);