- ベストアンサー
配列を後ろから数えるには?
- 配列を後ろから数える方法について教えてください。
- 例えば、配列を前から数える方法がわかりますが、逆に配列を後ろから数える場合はどうすればよいのか教えてください。
- 目的は、配列の要素を逆順に出力させることです。ヒントやアドレスを教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
問題文の配列を先頭から末尾まで順に走査する場合, System.out.println(vi[0]); System.out.println(vi[1]); System.out.println(vi[2]); System.out.println(vi[3]); System.out.println(vi[4]); System.out.println(vi[5]); System.out.println(vi[6]); と7行ひたすら並べて書くこともできるのだけれど,そこに 次の★のような繰り返しパターンを見て取ることができるから, System.out.println(vi[0]); ★初期値i=0から System.out.println(vi[1]); ★増分i++して System.out.println(vi[2]); ★増分i++して System.out.println(vi[3]); ★増分i++して System.out.println(vi[4]); ★増分i++して System.out.println(vi[5]); ★増分i++して System.out.println(vi[6]); ★増分i++して ★ループ継続条件 i<7 の間だけループし続ける。 次のfor文に置き換えたわけです。 (注:配列viの長さ vi.length は7ですから) for (int i = 0; i < vi.length; i++) { ---------------------------------------- 同様に,問題文の配列を末尾から先頭まで逆に走査する場合, System.out.println(vi[6]); System.out.println(vi[5]); System.out.println(vi[4]); System.out.println(vi[3]); System.out.println(vi[2]); System.out.println(vi[1]); System.out.println(vi[0]); と7行ひたすら並べて書くこともできるのだけれど,そこに 次の★のような繰り返しパターンを見て取ることができるから, System.out.println(vi[6]); ★初期値i=6から System.out.println(vi[5]); ★増分i--して System.out.println(vi[4]); ★増分i--して System.out.println(vi[3]); ★増分i--して System.out.println(vi[2]); ★増分i--して System.out.println(vi[1]); ★増分i--して System.out.println(vi[0]); ★増分i--して ★ループ継続条件 i≧0 の間だけループし続ける。 次のfor文に置き換えられます。 (注:vi.length-1 は 7-1=6ですから) for (int i = vi.length - 1; i >= 0; i--) {
その他の回答 (4)
- wormhole
- ベストアンサー率28% (1626/5665)
>今までずっと配列って言ったら for (int i = 0; i < vi.length; i++)がほぼ定形分ように頭にはいっていますので考え方がわからないです。 結局のところは for文が何をやってるのかわかってないって事でしょ? 参考書を調べるなりしてfor文がどういうものなのか自分で調べて理解した方がいいと思いますよ。
お礼
いやfor文と言ったら for(初期化; 繰り返し条件; カウントアップorカウントダウン){ } と理解して 配列なら int vi[] = {0, 1, 2, 3, 4, 5, 6}; for(int i=0 i<a.length; i+++){ } i=0 iが配列0,1,2,3,4,5という長さより小さいときがiをカウントアップ i=1 以下同じ i=2 以下同じ i=3 以下同じ i=4 以下同じ i=5 以下同じ i=6 以下同じ i=7で繰り返し条件がfalseになりfor文が抜けると理解しています。 今までじゃー逆に配列を後ろから数えるという考え、その演習問題、発想がなく質問しました。
- ariseru
- ベストアンサー率56% (928/1657)
>for (int i = 0; i < vi.length; i++) 上記の一行を書き換えるだけで可能ですよ。 for (int i = vi.length - 1; i > 0; i--) こんな感じに書き換えるだけで配列を後ろから参照するようになります。 他にも方法はありますが、この方法が一番簡単かな。 >理解の為説明してもらえますか? i = vi.length - 1:ループの開始位置 i > 0:ループの終了条件 i--:iの値の増減値 前述の内容に書き換えた場合、i=6からスタートして、i>0という条件を満たしている間ずっとi=i-1を繰り返しながらループするって感じになります。 ちなみに、ループの開始位置がvi.length - 1になるのは、配列の各要素の格納番号というのは0から開始するので、要素の数が7個なら格納番号は0~6の7個になるからです。
- pokeman-v
- ベストアンサー率29% (8/27)
申し訳ないです 逆転の発想です。 今回の質問で言うと 表示する配列のスタート地点はどこでしょうか 表示する配列のゴール地点はどこでしょうか 答えは スタート地点が、7で ゴールが、0です ですので7スタートの0ゴールのコードを書けばいいんです 数字って、増えるばかりじゃないですよね 徐々に減らすこともできますし、倍にすることもできますし・・・ 今回は7から0なので、減らします。 減らす方法はいろいろあるので考えてみるといいと思います。 説明になってるでしょうか・・・。
お礼
有難うございます。 考え方ですね、本当はそういう回答が欲しかったです。待っていた回答です
- pokeman-v
- ベストアンサー率29% (8/27)
for( int i = 1; i <= vi.length; i++ ) { System.out.println("vi[" + i + "] = " + vi[ vi.length - i ]); } これでできると思います
お礼
理解の為説明してもらえますか? 元々その為に質問しましたので・・・
お礼
有難うございます。 一番わかりやすい回答でした、他の方をお礼した後ベストアンサーさせて戴きます。