プロが教える店舗&オフィスのセキュリティ対策術

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("");

}

}
}
----------------------------------------------------------
上記のソースを元に作成できたらと、思います。

A 回答 (11件中1~10件)

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(""); //改行をします
}

}

}

実行結果
123456789
24681012141618
369121518212427
4812162024283236
51015202530354045
61218243036424854
71421283542495663
81624324048566472
91827364554637281

goo上ではtab区切りで見えませんが実行すればtab区切りに表示されるはずです。
    • good
    • 0
この回答へのお礼

braver_2004さまありがとうございました。

お礼日時:2006/11/22 18:56

No2です。


あの…。失礼ながら横槍を…。
当初の質問からそれているような気がします。

>九九の計算結果を一旦、Stringの配列に格納してから、
>ArrayListから値を出力します。
>一旦、格段はString[]s = new String[9];として
>Stringの配列に格納してから、ArrayListにまとめて出力する方法
>をご教授お願いできますか?

というのが要件だと思うのですが。

それに沿った形でNo2で詳細設計(適当ですが)したつもりなんですけど、質問者さんはこのとおりやってみたのですかね?
質問者様はソースでばっちり動く回答を望みなのでしょうか。それならばソースを書きますが。
勉強の為ならばヒントだけで、ソースを回答するのはあまりよろしくないかな、と思いまして…。

ちなみにIteratorは使用しなくてもしても問題ないです。No5さまのようなgetメソッドでも十分です。しかし、せっかくListを使用するなら、と思い紹介しました。

この回答への補足

ご意見ありがとうございます。
確かに反れていますね・・・

私もbraver_2004の回答を元に
考えていたところに、親切なご回答者さん
がソースを記述していただいたので
参考にさせていただきました。

>ソースでばっちり動く回答を望みなのでしょうか。
確かにその回答は欲しいのですが、なるべく
自分で簡単なフローチャートを書いて、
考えながら勉強しています。
なので、すぐには回答は見てませんよ!
アドバイスありがとうございます。

補足日時:2006/11/20 23:35
    • good
    • 0

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配列に格納した」という変化をまず理解しましょう。
    • good
    • 0

ANo5です。

訂正の訂正です。
for(int m = 0; m < 9; m++ ){
list.add(str[m]);
}}

この回答への補足

ご丁寧にありがとうございます。
参考にさせていただきます。

補足日時:2006/11/20 23:42
    • good
    • 0

ANo5です。


String[] str = new String[9];
とした場合は途中で
str[i - 1] = top;
としてください。前の解凍でstr[0]が無駄になっていました。
    • good
    • 0

>>String[] str = new String[10];


>ここでなぜ配列を10個作っているのか
>教えていただけますか?
おそらく、
1の段はstr[1]に
2の段はstr[2]に

「nの段」の「n」と「String配列strのインデックス」を合わせるため
だと思いますよ。

あくまでも「おそらく」ですが。
    • good
    • 0

こんなので好いんでしょうか?


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個作っているのか
教えていただけますか?
よろしくお願いします。

補足日時:2006/11/20 16:55
    • good
    • 0

なるほど。

失礼しました。

String s = i * j;
とするとコンパイルエラーになってしまう。
ということですね?

ちょっと変則的かもしれませんが、
String s ="" + 2 * 3;
s = s + 5 * 5;
こんなことができます。

Iteratorの方は何がどうつまづいているのか分からないので
状況の補足をお願いします。
    • good
    • 0

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での取得を勉強中です。
ちょっとそこでつまづいていますので
アドバイスをいただけたら幸いです。
よろしくお願いします。

補足日時:2006/11/20 12:12
    • good
    • 0

文章を見る限りですと


格納してから格納したものを表示する
と見受けられます。

でも今のロジックだと格納しながら表示してますよね。
それをまず分離しましょう。そうすればきっと頭も整理されるのではないですか?

処理の流れは以下のようになるのかな。

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
以下省略

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
となるのが理想です。
ご教授お願いします。

補足日時:2006/11/17 19:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!