74411
以下の配列を返すプログラムで、3つ質問があります。

①fill()メソッドの返り値は、「hairetsu」ですが、これは、具体的に配列の何を返しているのでしょうか？ 配列の個々の要素なのか、配列全体なのか。  
具体的に、mainメソッドで、for文を使って、引数を指定してhairetsu()メソッドを呼び出しています。例えば、arrays=fill(“ああ”,i,m)でfillメソッド呼び出していますが、この結果、どのような値が、arraysに代入されているのでしょうか？（arraysの中身はなんでしょうか？）  
この場合ですと、hairetsu[0][1],hairetsu[1][1],hairetsu[2][1]の中身である、「ああ」が返されているのか、それとも、「ああ」という要素を含んだ、二次元配列全体（hairetsu)が返されているのか、という質問です。

②mainメソッドで、新たに配列を宣言（String[][] arrays)しています。  
mainメソッド内のfor文の中で、arrays=fill(“ああ”,i,m)でfillメソッド呼び出して、その結果をarraysに代入していますが、これは、arrays[0][1],arrays[1][1],arrays[2][1]、この3つの添字の中に代入されている、という認識で合っていますか？

③mainメソッドで、新たに配列を宣言（String[][] arrays)しています。  
既にfillメソッドで配列を用意しているので、mainメソッドでわざわざ新たに配列を宣言する必要があるのかどうか疑問です。できれば、mainメソッドで新たに配列を用意せずに、fillメソッド内の配列を、mainメソッドでも使用したいです。やり方があれば教えていただければ幸いです。

```

    public class Sample_hairetsu1 {
        
    
        public static String[][] fill(String filler, int a, int b) {
            String[][] hairetsu = new String[9][9];
            //System.out.println("アイウエいお");
        
    
            for (int i = 0; i < 3; i++) {
                for (int m = 0; m < 3; m++) {
                    if (i == a && m == b) {
                        hairetsu[i][m] = filler;
    
                    }
                    
                }
                
    
            }
          
            return hairetsu;
        }
    
        public static void main(String[] args) {
            String[][] arrays;//= new String[9][9];//メインメソッドで新たに配列を用意している
    
            for (int i = 0; i < 3; i++) {
                for (int m = 0; m < 3; m++) {
                    if (i == 0 && m == 1 || i == 1 && m == 1 || i == 2 && m == 1) {
                       arrays= fill("ああ", i, m);
                      
                    } 
                    else {
                       arrays= fill("いい", i, m);
                    }
                    System.out.print(arrays[i][m]);
    
                }
    
                System.out.println("");
            }
    
           
    
        }
    }
    
    
    
```

実行環境:  
openjdk version "15.0.1" 2020-10-20  
OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.1+9)  
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.1+9, mixed mode, sharing)
CC BY-SA 4.0
2021-03-04T02:25:18.483
74406
2021-03-04T05:27:29.313
2021-03-04T05:27:29.313
3060
39688
question
java
配列を返すメソッドについて
> ①fill()メソッドの返り値は、「hairetsu」ですが、これは、具体的に配列の何を返しているのでしょうか？

「「ああ」という要素を含んだ、二次元配列全体（hairetsu)が返されている」です。

> ②… arrays[0][1],arrays[1][1],arrays[2][1]、この3つの添字の中に代入されている、という認識で合っていますか？

合っていません。`arrays`は配列全体を表すものであり、代入するたびに`array`の中身(全体)が`fill`メソッドで作ったものに置き換えられます。したがって、`main`内でループで最後に実行される代入文が`arrays=
fill("いい", i,
m);`(i=2,m=2)であれば、`array`の中身全体がその呼び出しの結果で置き換えられます。(つまり`array[2][2]`だけが`"いい"`で残りは`null`。)

> ③…できれば、mainメソッドで新たに配列を用意せずに、fillメソッド内の配列を、mainメソッドでも使用したいです。

できません。あなたが示されたコードでは`main`メソッドで配列を用意しているのではなく、「配列全体を入れておくための変数」を用意しているだけです。そのような変数を用意しない限り、`main`メソッド内でその配列を使うことはできません。
CC BY-SA 4.0
2021-03-04T05:08:01.387
74411
2021-03-04T05:08:01.387
13972
74406
answer