35445


javaのforでする処理について質問があります。

for文を使用してやると  
木村：windows  
木村：apple  
木村：android  
......  
となってしまいました

自分が望んでいるのは、  
木村：windows  
児玉：apple  
KG:android  
としたいです

どなたかうまく表示させる方法が  
お分かりの方がいらっしゃいましたら、  
教えていただけないでしょうか。  
宜しくお願いします。

[code]

        String[] home = { "木村", "児玉", "KG"};
                    String[] image_urls = {
                            "https://cdn3.iconfinder.com/data/icons/social-media-2068/64/_windows-128.png",
                            "https://cdn3.iconfinder.com/data/icons/social-media-2068/64/_Apple-128.png",
                            "https://cdn3.iconfinder.com/data/icons/social-media-2068/64/_Android-128.png",
                            "https://cdn3.iconfinder.com/data/icons/social-media-2068/64/_Google-128.png",
                            "https://cdn1.iconfinder.com/data/icons/social-networks-15/512/google_google_social_network_logo-128.png",
                            "https://cdn1.iconfinder.com/data/icons/social-networks-15/512/gogle_network_logo-128.png",
                            "https://cdn1.iconfinder.com/data/icons/social-networks-15/512/Bird_tweet_tweeting_twitter_logo-128.png"
        };
        for (final String home_item : home){
            for(final String image_url : image_urls) {
                listitem item = new listitem(image_url, home_item);
                listItems.add(item);
                }
        }
    
[/code]

![スクリーンショット](https://lh3.googleusercontent.com/ElJe-
zYYzkQOxqIouBfFrMXHkVe37oCaf0MrvsGjMonZ9YbrW-
Igdf4VGRh-d8HeSKBoF1OXW4ic0w4=w1366-h768-rw-no)


CC BY-SA 3.0
2017-06-09T12:38:58.653
35444
2017-06-09T13:52:51.300
2017-06-09T13:43:30.070
23205
23205
question
java
forによる繰り返し処理について


ネストしたfor文を使えばそうなるのは必然でしょう。  
たとえば、配列 `array1 = ["1", "2"]` と配列 `array2 = ["a", "b", "c"]`
を以下のようにfor文を回すと、処理順はコメントのようになります。

[code]

    for (String a1 : array1) {                     // ① 　 　 ⑧
        for (String a2 : array2) {                 // ② ④ ⑥ ⑨ ⑪ ⑬
            System.out.println(a1 + " " + a2);     // ③ ⑤ ⑦ ⑩ ⑫ ⑭
        }
    }
    
[/code]

このとき、aやbになにが入っているかを考えると、

③ `"1 a"`  
⑤ `"1 b"`  
⑦ `"1 c"`  
⑩ `"2 a"`  
⑫ `"2 b"`  
⑭ `"2 c"`

と表示されることがわかると思います。  
これと同じことが質問文にあるプログラムに起きているため、求めている出力結果が得られない状態が起きているのです。

* * *

さて、求めている出力ですが、

> 木村「windows」児玉「apple」..「android」..「google」

の「‥」の部分はなにを示しているのかよく分からないので推測ですが、きっと名前が入ると仮定して回答します。  
要は配列と配列の要素を1対1で対応させたい(2つの配列の要素数は同じとする)、という要件だとすると、for文をネストして回すのでは上手くいかないので、配列の要素番号を使って取り出すのが良いでしょう。

[code]

    for (int i = 0; i < home.length; i++) {
        listitem item = new listitem(home[i], image_urls[i]);
        listItems.add(item);
    }
    
[/code]

ここからは余談になりますが、変数名、クラス名の命名はもう少し統一性をもたせると良いでしょう。  
一般的に、Javaでは以下の命名規則が使用されます。

  * クラス名はアッパーキャメルケース(単語の区切りごとに大文字、先頭の文字も大文字)
  * 変数名はローワーキャメルケース(最初だけ小文字で単語の区切りごとに大文字)

また、配列の変数名に対して不可算名詞を使う場合、複数形を使えないのは分かるのですが、配列と分かるような命名を付けたい場合、名詞＋Arrayを付けたりしますので、そういったテクニックを駆使して書き直してみると可読性が向上して良さそうですね。ご参考までに。(そもそも不可算なものを配列にするのはおかしいため、単語を選び直してみるのも1つの手です)

[code]

    for (int i = 0; i < homeArray.length; i++) {
        ListItem item = new ListItem(homeArray[i], imageUrls[i]);
        listItems.add(item);
    }
    
[/code]


CC BY-SA 3.0
2017-06-09T13:52:51.300
35445
2017-06-09T13:52:51.300
7655
35444
answer