- ベストアンサー
九九の表の応用
Java勉強中の超初心者です。 ちょっと前に同じ質問をしたのですが、前回の回答をよく見たら 趣旨とは違った処理をしていたのでもう一度、質問をさせて下さい。 ArrayListを使った九九の表を作成します。 この時に、九九の計算結果を一旦、Stringの配列に格納してから、 ArrayListから値を出力します。 この時にArrayListに格納してから出力するソースは書くことが できたのですが、一旦、格段はString[]s = new String[9];として Stringの配列に格納してから、ArrayListにまとめて出力する方法 をご教授お願いできますか? ----------------------------------------------------------- ArrayList list = new ArrayList(); //ここにString[]s = new String[9];が入ります。 for(int i = 1; i <= 9; i++ ){ for(int j = 1; j <= 9; j++){ list.add(i*j); System.out.print(list.get(list.size() - 1) + " "); if((list.size() - 1) % 9 == 8 && (list.size() - 1) != 0){ System.out.println(""); } } } ---------------------------------------------------------- 上記のソースを元に作成できたらと、思います。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
No2のbraver_2004です すぐ回答を見ていないということで・・・。 No2で書いた処理をコードにしました。 JavaのVersionは1.4.2です。 import java.util.ArrayList; import java.util.Iterator; public class Test { public static void main(String[] args) { ArrayList al = new ArrayList(); //ArrayListをnew for (int i = 0;i<9 ;i++){ // ループ1 String[] s = new String[9]; // i段用の配列をnew (ループ外でnewすると全て9段での出力になってしまいます) for (int j=0;j<9 ;j++){ // ループ2 s[j] = String.valueOf((i+1)*(j+1)); //計算結果を格納 } al.add(s); // 格段の配列をListに格納 } Iterator ite = al.iterator(); //Iteratorの取得 String[] s2 ; // 取得用の配列の宣言 while(ite.hasNext()){ // Iteratorの要素がある分ループ s2 = (String[])ite.next(); // Iteratorより取得 for(int k=0; k < s2.length;k++ ){ //取得した配列要素分ループ System.out.print(s2[k]); //表示 System.out.print("\t"); //見易さのためTab区切りで表示しています。 } System.out.println(""); //改行をします } } } 実行結果 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 goo上ではtab区切りで見えませんが実行すればtab区切りに表示されるはずです。
その他の回答 (10)
- braver_2004
- ベストアンサー率62% (20/32)
No2です。 あの…。失礼ながら横槍を…。 当初の質問からそれているような気がします。 >九九の計算結果を一旦、Stringの配列に格納してから、 >ArrayListから値を出力します。 >一旦、格段はString[]s = new String[9];として >Stringの配列に格納してから、ArrayListにまとめて出力する方法 >をご教授お願いできますか? というのが要件だと思うのですが。 それに沿った形でNo2で詳細設計(適当ですが)したつもりなんですけど、質問者さんはこのとおりやってみたのですかね? 質問者様はソースでばっちり動く回答を望みなのでしょうか。それならばソースを書きますが。 勉強の為ならばヒントだけで、ソースを回答するのはあまりよろしくないかな、と思いまして…。 ちなみにIteratorは使用しなくてもしても問題ないです。No5さまのようなgetメソッドでも十分です。しかし、せっかくListを使用するなら、と思い紹介しました。
補足
ご意見ありがとうございます。 確かに反れていますね・・・ 私もbraver_2004の回答を元に 考えていたところに、親切なご回答者さん がソースを記述していただいたので 参考にさせていただきました。 >ソースでばっちり動く回答を望みなのでしょうか。 確かにその回答は欲しいのですが、なるべく 自分で簡単なフローチャートを書いて、 考えながら勉強しています。 なので、すぐには回答は見てませんよ! アドバイスありがとうございます。
- freedom560
- ベストアンサー率46% (80/173)
No.1さんが書いていますが、Stringの配列を用意しているならArrayListは必要ありませんよね。 String ret[]=new String[9]; for(int i=1;i<=9;i++) { ret[i-1]=Integer.toString(i*1); //初期化ついでにはじめの値を代入しておく for(int j=2;j<=9;j++) { ret[i-1]+=" "+Integer.toString(i*j); } } for(int i=0;i<ret.length;i++) { System.out.println(ret[i]); } と書けばArrayListは使わなくてよいです。「ArrayListにStringを格納していた」→「String配列に格納した」という変化をまず理解しましょう。
- tachiwa
- ベストアンサー率34% (25/73)
ANo5です。訂正の訂正です。 for(int m = 0; m < 9; m++ ){ list.add(str[m]); } }
補足
ご丁寧にありがとうございます。 参考にさせていただきます。
- tachiwa
- ベストアンサー率34% (25/73)
ANo5です。 String[] str = new String[9]; とした場合は途中で str[i - 1] = top; としてください。前の解凍でstr[0]が無駄になっていました。
- pcbeginner
- ベストアンサー率46% (261/560)
>>String[] str = new String[10]; >ここでなぜ配列を10個作っているのか >教えていただけますか? おそらく、 1の段はstr[1]に 2の段はstr[2]に と 「nの段」の「n」と「String配列strのインデックス」を合わせるため だと思いますよ。 あくまでも「おそらく」ですが。
- tachiwa
- ベストアンサー率34% (25/73)
こんなので好いんでしょうか? import java.util.*; class Editor002 { public static void main(String args[]){ ArrayList list = new ArrayList(); String[] str = new String[10]; for(int i = 1; i <= 9; i++ ){ String top =""; for(int j = 1; j <= 9; j++ ){ top = top + String.valueOf(" " + (i * j)); str[i] = top; } } for(int m = 1; m <= 9; m++ ){ list.add(str[m]); } for(int k = 0; k <list.size(); k++ ){ System.out.println(list.get(k)); } } }
補足
詳しいご回答ありがとうございます。 >String[] str = new String[10]; ここでなぜ配列を10個作っているのか 教えていただけますか? よろしくお願いします。
- pcbeginner
- ベストアンサー率46% (261/560)
なるほど。失礼しました。 String s = i * j; とするとコンパイルエラーになってしまう。 ということですね? ちょっと変則的かもしれませんが、 String s ="" + 2 * 3; s = s + 5 * 5; こんなことができます。 Iteratorの方は何がどうつまづいているのか分からないので 状況の補足をお願いします。
- pcbeginner
- ベストアンサー率46% (261/560)
String配列に値(文字列)を入れるには String[] hoge = new String[9]; hoge[0] = "文字列"; ですよ。 とりあえず、「配列」の基本を勉強した方が良いと思います。
補足
ご回答ありがとうございます。 私が迷ったのはString配列にint型の計算結果を 代入する方法がわかりませんでした。 決して配列がわからないのではないのですが・・・ 今は、 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ArrayList list = new ArrayList(); String[]s = new String[9]; for(int i = 0; i<= 8; i++){ for(int j = 1; j<=9; j++){ s[i]= String.valueOf(i*j); } list.add(s); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Iteratorでの取得を勉強中です。 ちょっとそこでつまづいていますので アドバイスをいただけたら幸いです。 よろしくお願いします。
- braver_2004
- ベストアンサー率62% (20/32)
文章を見る限りですと 格納してから格納したものを表示する と見受けられます。 でも今のロジックだと格納しながら表示してますよね。 それをまず分離しましょう。そうすればきっと頭も整理されるのではないですか? 処理の流れは以下のようになるのかな。 ArrayListをnewします ループ1 1段から9段までのループ (i) i段用のString配列を[9]newします ループ2 i段での1~9までのループ (j) String[j]にi*jの結果を格納 ループ2終了 格納されたString配列をArrayListにaddする ループ1終了 上記処理で格納処理が終了です。 次に格納された情報を出力しましょう。 格納したArrayListはListインターフェースを持っているのでIteratorを使用してみましょう ArrayListよりIteratorを取得します ループ1 iteratorの要素が存在するまでループ iteratorより格納されている情報を取得(String配列を取得)します ループ2 String配列の要素数分ループ(k) 画面に出力 String[k] ループ2終了 改行を出力 ループ1終了 あえてソースで書きませんでした。 人それぞれでしょうが、プログラミングで詰まった時はこのように日本語で整理することも一つのアプローチになるかと思われます。
補足
braver_2004さまご回答ありがとうございます。 >格納してから格納したものを表示する >と見受けられます。 その通りでございます。 掛け算の結果をString[]sに格納するには どうすればいいか悩んでいます。 braver_2004さまにご回答をしていただく前に 作成したソースが下記のソースになります。 ------------------------------------------ ArrayList list = new ArrayList(); String[]s = new String[9]; String kekka = null; for(int i = 1; i<= 9; i++){ for(int j = 1; j<=9; j++){ String kuku = i*j + " "; kekka = kekka + String.valueOf(kuku) + " "; ---------------------------------------------------- ちなみに実行結果は ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 以下省略 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ となるのが理想です。 ご教授お願いします。
- pcbeginner
- ベストアンサー率46% (261/560)
まずご自身が「元にしてください。」と貼り付けているソースの内容を理解していますか? >九九の計算結果を一旦、Stringの配列に格納してから と記述しているのに、 >list.add(i*j); でArrayListに格納していますよ。 ってことは、 list.add(i*j); でArrayListに格納するのではなく、 Stringの配列に格納すればいいわけです。 具体的なソースはご自身で試行錯誤して下さい。 その結果わからないことがあれば、また質問して下さい。 (試行錯誤しないのはただの丸投げですので。)
補足
pcbeginnerさんご回答ありがとうございます。 試しにArrayListで格納して出力する 場合を作成したソースをそのまま コピペしたものをアップしてしまいました。 すいません。 今、詰まっている箇所は一回、String配列に 格納する方法がわかりません。
お礼
braver_2004さまありがとうございました。