for文を使用し九九の計算結果を配列に格納し、その配列内の情報を表形式で表示してみる。※配列はArrayListを使用すること
上記の問題を解いています。
--------------------------------------------------------------
import java.util.ArrayList;
public class m4_2 {
public static void main(String args[])
{
ArrayList list = new ArrayList();
String[]s = new String[9];
for(int i = 1; i<=s.length; i++){
for(int j =1; j<=s.length; j++){
list.add((i * j));
//ここがどのように記述するか??
}
System.out.print(list.get(0));
System.out.print(list.get(1));
System.out.print(list.get(2));
System.out.print(list.get(3));
System.out.print(list.get(4));
System.out.print(list.get(5));
System.out.print(list.get(6));
System.out.print(list.get(7));
System.out.print(list.get(8));
System.out.print("\n");
}
}
}
----------------------------------------------------------
実行結果イメージ
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
(以下省略)
私の書いたソースでは1の位しか計算してくれません。
今月から本格的にJavaを勉強し始めた初心者なので
どうかよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
計算は正しく行われ、格納していますよ。
では、まず何を出力してますか?
それほど変更していなければ
------------------------------------------------
ArrayList list = new ArrayList();
String[]s = new String[9];
for(int i = 1; i<=s.length; i++){ //----(1)
for(int j =1; j<=s.length; j++){ //----(2)
list.add(new Integer(i * j));
//ここがどのように記述するか??
}
System.out.print(list.get(0)); //----(3)
System.out.print(list.get(1));
System.out.print(list.get(2));
System.out.print(list.get(3));
System.out.print(list.get(4));
System.out.print(list.get(5));
System.out.print(list.get(6));
System.out.print(list.get(7));
System.out.print(list.get(8)); //----(4)
System.out.print("\n");
}
------------------------------------------------
になっていると思います。
質問者さんはきっと
list.get(0)には1の段の計算結果
list.get(1)には2の段の計算結果
…
list.get(8)には9の段の計算結果
が入っていると思っているでしょうが、違います。
実際は
list.get(0)には1*1の計算結果
list.get(1)には1*2の計算結果
…
list.get(8)には1*9の計算結果
が入っています。
まず、最初に(2)のfor文でlistの0~8に1の段の各計算結果が格納され、
(2)のfor文が終わったあとに(3)~(4)で1の段の計算結果が出力されます。
次に2回目のfor文(jが2のとき)で今度はlistの9~17に2の段の計算結果が格納されます。
が、2回目の(2)が終わったあとに、(3)~(4)で「”また”1の段の計算結果」を出力しています。
以降同様に、3~9の段を計算しても、「1の段の計算結果」しか出力していないため、
出力結果が
----------------------------
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
----------------------------
になってしまうのです。
ですからNo.1では
System.out.print(list.get(9));
…
System.out.print(list.get(80));
を表示すれば良いと答えたのですが、
(1)のfor文の中に書いてしまい、1の段の計算結果を格納した時点では2の段以降の計算結果がないため、
例外が発生しています。
だからNo.2で
外側のfor文((1)の部分のこと)の外で
System.out.print(list.get(0));
…
System.out.print(list.get(80));
とすれば良いと回答したのですが、…どうやら読まれていないようですね。
while文の質問のときにもアドバイスしましたが、いきなり全てを書くのではなく、
1つ1つ書いていくことをお奨めします。
今回だと
・九九の計算結果を格納する部分
・格納した計算結果を表示する部分
に分けて考えると良いと思います。
for(){
for(){
九九の計算結果を格納
}
}
for(){
格納した九九の計算結果を表示
}
こんな感じで。
ご回答ありがとうございました。
pcbeginnerさまの解説でよく理解できていない
ことと、課題のポイントがつかめました。
ありがとうございます。
こんな私ですがまたアドバイスを
よろしくお願いします。
No.3
- 回答日時:
>コンパイルエラー
list.add((i*j));
ArrayListにはObjectしか格納できないので。
^^^^^^^^^^^^^^^^^^^^^
と書いてあるのですが…。
ArrayListにはObjectしか格納できません。
list.add(i*j);
というのは「i*j」という基本データのint型を格納しようとしてます。
(i*jの計算結果も当然int型)
だから
add(Object o)
とObjectのインスタンスを引数にしているaddメソッドにintを引数にしてるのでコンパイルエラーが起きるのです。
各基本データ型には「ラッパークラス」という各基本データに対応したクラスがあります。
例えばint型ならjava.lang.Integerクラスです。
他にもBooleanクラスやDoubleクラスなどもあります。
詳細はJavaDocを見て下さい。
list.add(i*j);
の部分は
Integer hoge = new Integer(i*j);
list.add(hoge);
でどうでしょうか。
この回答への補足
ご回答ありがとうございます。
ラッパークラスを使用しました。
しかし、実行結果が
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
になってしまいます。
先の段の計算がうまくいきません。
プログラムのセンスと知識ないので
この先もよろしくお願いします。
No.2
- 回答日時:
外側のfor文の外で
System.out.print(list.get(0));
…
System.out.print(list.get(80));
すれば大丈夫です。
ちなみに質問にあるソースはコンパイルできますか?
1.4.2_12だとコンパイルできませんよ。
list.add((i*j));
ArrayListにはObjectしか格納できないので。
この回答への補足
ご回答ありがとうございます。
pcbeginnerさまのご指摘の箇所で
コンパイルエラーが発生しております。
この場合、どのように記述するのか
教えていただけませんか?
よろしくお願いします。
No.1
- 回答日時:
ぱっと見ですけど、計算はしてるんじゃないですか?
ただ、計算結果を
System.out.print(list.get(0));
…
System.out.print(list.get(8));
としかしていないので、1の段の結果しか表示されていないのでは?
System.out.print(list.get(9));
…
System.out.print(list.get(80));
を表示するとどうなりますか?
あと、
list.add((i * j));
のカッコが1組余分ですね。
この回答への補足
ご回答ありがとうございます。
System.out.print(list.get(9));
を加えたら
java.lang.IndexOutOfBoundsException
(上記のソースを加えた行でエラー)
でした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
System.out.printlnの意味がよ...
-
1~100までの数字を表示し、か...
-
System.out.printlnの出力先
-
Java 九九の表について
-
Eclipseのコンソールを常に表示...
-
javaのwhile文で九九の表
-
flush()とclose()について
-
Javaで改行などが出来ないのです。
-
文字の順番を昇順に
-
system.out.printが出力されない
-
行列の表示
-
JAVAのServletで、画像表示につ...
-
Log4jで機能毎に別ファイルへ出...
-
Javaで任意のパスへ任意のファ...
-
一定のスペースを空けて端を揃...
-
HashMapの内容
-
OutputStreamの内容を確認する...
-
ArrayListによる計算表作成
-
JavaScriptの変数をjavaのメソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Log4jで機能毎に別ファイルへ出...
-
System.out.printlnの出力先
-
Eclipseのコンソールを常に表示...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
system.out.printが出力されない
-
1~100までの数字を表示し、か...
-
StringBufferで改ページ処理を...
-
InputStreamはreadが1回しかで...
-
JavaScriptの変数をjavaのメソ...
-
Tomcatが無応答となる現象が起...
-
1~100までの数字を表示したい
-
switch分が機能しません。
-
数字文字列をパック10進数に変...
-
VBSエラー"オブジェクト型の変...
-
Apache POI のログについて
-
System.out.printlnの意味がよ...
-
Javaの問題なのですが、 永久ル...
-
OpenSSL関数エラーについて
おすすめ情報