2017-03-16 22 views
2

ここで2次元文字列配列を使って遊んでいるだけで、実際の配列の行次元だけを出力すると出力がどのように変化するかを見たいと思っていました。以下は奇妙な出力の私のコードです。Java Multidimensional Stringは奇妙な出力を与えます

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

にラインSystem.out.println(words[m]);を変更することができます。 – yters

+1

[SomeType @ 2f92e0f4 "を取得せずにJavaオブジェクトを印刷するにはどうすればよいですか?](http://stackoverflow.com/questions/29140402/how-do-i-print-my-java-object-without- get-sometype2f92e0f4) – Joe

答えて

3

@ytersで指摘したように、あなたが、ここで見ている何が、配列への参照です。

各アレイの内側には、別のアレイが存在することに注意してください(2次元配列なので)。したがって、words[0]の場合の結果は["Hello","Mr.","Spencer!"]になります。

Javaでprint文を実行すると、正しい情報を提供するためにオブジェクトtoString()メソッドを使用しています。この場合、これを行うオブジェクトはタイプString[]であり、したがって配列です。 toString()をArray上で実行すると、オブジェクト参照が出力されます。これは結果として得られます。 (例えば:[Ljava.lang.String;@135fbaa4 )。あなたは、配列がこのようなコードを書いている印刷するには何ができるか

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

クラスUtilの配列を使用することにより、あなたはそのようなあなたの2次元配列内の各配列を印刷することができます。

+0

彼はすでに2つのループを行っていたので、 'words [m] [n]'もOKでした) – AxelH

+1

@AxelHはい、OPはこれを言っていました。私の解釈では、彼はインデックスnを反復することなく、mの各インデックスについて完全な配列を持つことを望んでいました。彼はまたNを使わなかったので、彼は自分が何をしているのか本当に理解していないと思った。 もちろん、あなたのポイントは有効ですが、私が推測する質問の解釈の違いだけです:-) –

0

それとも、Javaは、文字列配列の参照をプリントアウトされSystem.out.println(words[m][n]);