九九の計算結果を表形式で表示する方法

このQ&Aのポイント
  • ArrayListを使用して九九の計算結果を表形式で表示する方法について説明します。
  • for文を使用して九九の計算結果を配列に格納し、その配列内の情報を表形式で表示します。
  • ソースコードの一部が改良されていないため、現在のプログラムでは1の位の計算のみが行われています。
回答を見る
  • ベストアンサー

ArrayListによる計算表作成

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を勉強し始めた初心者なので どうかよろしくお願いいたします。

  • Java
  • 回答数4
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答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(){   格納した九九の計算結果を表示 } こんな感じで。

camp-fanks
質問者

お礼

ご回答ありがとうございました。 pcbeginnerさまの解説でよく理解できていない ことと、課題のポイントがつかめました。 ありがとうございます。 こんな私ですがまたアドバイスを よろしくお願いします。

その他の回答 (3)

回答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); でどうでしょうか。

camp-fanks
質問者

補足

ご回答ありがとうございます。 ラッパークラスを使用しました。 しかし、実行結果が 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しか格納できないので。

camp-fanks
質問者

補足

ご回答ありがとうございます。 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組余分ですね。

camp-fanks
質問者

補足

ご回答ありがとうございます。 System.out.print(list.get(9)); を加えたら java.lang.IndexOutOfBoundsException (上記のソースを加えた行でエラー) でした。

関連するQ&A

  • 九九の表の応用

    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(""); } } } ---------------------------------------------------------- 上記のソースを元に作成できたらと、思います。

    • ベストアンサー
    • Java
  • ArrayListを使った多次元配列の作成について

    ArrayListで可変長配列を扱っているのですが、 2次元可変長配列を用いる必要が出てきたので、 下記のように変更したのですがうまくいきません。 何が悪いのか教えていただけませんでしょうか? ----------------------------------------- ArrayList cars=new ArrayList(); cars.add("フェラーリ"); cars.add("ポルシェ"); cars.add("メルセデスベンツ"); for(int i=0;i<cars.size();i++){  String str=(String)cars.get(i);  System.out.println(str);} ----------------------------------------- 上記から下記のように変更しました。 ----------------------------------------- ArrayList[] cars=new ArrayList[3]; cars[0].add("フェラーリ"); cars[0].add("ポルシェ"); cars[0].add("メルセデスベンツ"); for(int i=0;i<cars[0].size();i++){  String str=(String)cars[0].get(i);  System.out.println(str);} ----------------------------------------- エラーは「Exception in thread "main" java.lang.NullPointerException」です。 どうやら初期配列が10ではなく3となってしまっているようです。

    • ベストアンサー
    • Java
  • ArrayListを使ったクラスの作成の仕方

    次のプログラム、どこが間違っているのでしょうか? コンパイルは通るのですが、実行しようとすると ずら~っとエラーが出てしまいます。 (例)at java.lang.ClassLoader.defineClass1(Native Method) at java.security.SecureClassLader.defineClass..... at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) ********************************************************** package siryou; import java.util.ArrayList; import java.io.*; class Info { private String name; private String age; private String nationality; public void setName(String nm) { name = nm; } public void setAge(String a) { age = a; } public void setNationality(String nt) { nationality = nt; } public void show(String j) { System.out.println("「名前=" + name + "」"); System.out.println("「年齢=" + age + "」"); System.out.println("「国籍=" + nationality + "」"); } } class Kojinjyoho02 { public static void main(String args[])throws IOException { System.out.println("何回入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); Info in = new Info(); ArrayList list = new ArrayList(); for(int i =0; i < res; i++){ System.out.println("名前は?"); str = br.readLine(); in.setName(str); System.out.println("年齢は?"); str = br.readLine(); in.setAge(str); System.out.println("国籍は?"); str = br.readLine(); in.setNationality(str); list.add(in); } for(int j=0; j < list.size(); j++){ String jyoho = (String)list.get(j); in.show(jyoho); } } }

    • ベストアンサー
    • Java
  • ArrayList で配列を扱う場合の記述方法について

    ArrayList で配列を扱う場合の記述方法について、 探しきれないのでご教授お願いします。 ArrayList list = new ArrayList(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } という箇所をArrayList<Date>listを使って書き直すのはどのようになるでしょうか。 ArrayList<Date>list= new ArrayList<Date>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(i+"は"+list.get(i)); } とすると、 型 ArrayList<Date> のメソッド add(Date) は引数 (String) に適用できません。 というエラーになってしまいました。

    • ベストアンサー
    • Java
  • 総称型ArrayList<E>への参照はパラメ-タ

    Java初心者です宜しくお願いします。 0から8までの数字をランダムに並べ替えるサブ関数を作成しました。 Eclipse上で単独のプログラムとして動かした場合には、エラーは出ませんが、他のプログラムの サブ関数として動かそうとすると、 「ArrayListはraw型です。 総称型ArrayList<E>への参照は、パラメ-ター化する必要があります。 Listはraw型です。総称型ArrayList<E>への参照は、パラメ-ター化する必要があります。」と いうエラーが出ます。 どのように修正してやればいいのでしょうか。 ================================================================================ public void ShuffleTest() { List c = new ArrayList() ; for ( int i = 0 ; i < 9 ; ++ i ) { c.add( new Integer( i ) ) ; } Collections.shuffle(c); // [?�?�?�?�] int j = -1 ; for ( int i = 0 ; i < 9 ; ++ i ) { // toString(c.get( i )) ; System.out.print( c.get( i ) + " " ) ; int k = j + 1 ; s_Oder[ k ] = i ; System.out.print( "s_Oder["+ k + "] =" + i ) ; } }

    • ベストアンサー
    • Java
  • すいません。解説してください。

    いつも教えて頂き大変お世話になっております。 下記プログラムを解説して頂きたいのです。 特に最初の4行を詳しく教えて欲しいです。 何度もすみません。 ご回答のほど、宜しくお願い申し上げます。 OSはUbuntu18.04を使っています。 このプログラムは、他のプログラムも関係するのでしょうか? 色々とお手数かけます。 コンパイルしたら注意:Sample90.javaの操作は、未チェックまたは安全ではありません。とエラーメッセージが出ました。 何でも参考になります。 ご回答のほど、宜しくお願い申し上げます。 package sample; import java.util.List; import java.util.ArrayList; import java.util.LinkedList; public class Sample90 { public static void main(String[] args) { new Sample90().execute(); } public void execute() { List list = new ArrayList(); list.add("A"); list.add("B"); for (int i = 0; i < list.size(); i++) { String s = (String) list.get(i); System.out.print(s + " "); } System.out.println(""); list = new LinkedList(); list.add("A"); list.add("B"); for (int i = 0; i < list.size(); i++) { String s = (String) list.get(i); System.out.print(s + " "); } } }

  • ArrayList でスタックを

    初歩的でツマラナイかもしれません。 import java.util.ArrayList; でスタックを実現するクラス"MyStack"を書きました。 フィールドは private ArrayList<Integer> stack = new ArrayList<Integer>(); のみという条件です。 MyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MyStack {   private ArrayList<Integer> stack = new ArrayList<Integer>();      // データを先頭に追加   public void push( int item ) {     stack.add( item );   }   // 先頭のデータを取り出す   public int pop( ) {     int rtn;     if( stack.isEmpty() ) {       System.out.println( "スタックは空です." );       System.exit( 1 );     }          rtn = stack.get( 0 );     stack.remove( 0 );     return rtn;   } } このMyStackを実行するクラス"MainForMyStack"を書きます。 実行結果は、標準出力に 43210 と出ることを想定しています。 MainForMyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MainForMyStack {   public static void main(String[] args) {     MyStack stack = new MyStack();     // 0,1,2,3,4 をスタックに追加     for( int i=0; i < 5; i++ ) {       stack.push( i );     }     // スタックのデータを先頭から取り出す     for( int i=0; i < stack.size(); i++ ) {       System.out.print( stack.pop() );     }   } } さて、MainForMyStack.java の i < stack.size(); の箇所でエラーが出るのはなぜでしょう? どなたかご教授の方お願いします。

    • ベストアンサー
    • Java
  • arraylist 二次元配列

    こんにちは 今アレイリストの二次元配列を学習しています DBからデータを取得で表示したいと思っています そこでfor文の拡張とつかうとうまくいうのですが 普通に記述するとうまくいきません 拡張FOR 文を使うのは初めてなので 何が違うかアドバイスお願いします コンパイルできません↓ if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ ArrayList<ArrayList> hai = new ArrayList<ArrayList>(); ArrayList list = (ArrayList)request.getAttribute("list"); if (list != null) { hai.add(list); } ArrayList list1 = (ArrayList)request.getAttribute("list1"); if (list1 != null) { hai.add(list1); } ArrayList list2 = (ArrayList)request.getAttribute("list2"); if (list2 != null) { hai.add(list2); } for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (int k = 0 ; k <= hai.size(); k++) { %> <td width="60"> <% out.print(hai.get(i)); } %> コンパイルOK 表示できています <% if(request.getAttribute("list")!=null || request.getAttribute("list1")!=null || request.getAttribute("list2")!=null){ ArrayList<ArrayList> hai = new ArrayList<ArrayList>(); ArrayList list = (ArrayList)request.getAttribute("list"); if (list != null) { hai.add(list); } ArrayList list1 = (ArrayList)request.getAttribute("list1"); if (list1 != null) { hai.add(list1); } ArrayList list2 = (ArrayList)request.getAttribute("list2"); if (list2 != null) { hai.add(list2); } for (int i = 0; i < hai.get(0).size(); i++) { %> <table border="3"> <tr> <% for (ArrayList list4 : hai) { %> <td width="60"> <% out.print(list4.get(i)); } %> <br> </tr> </table> <% 上のソースの エラーメッセージ 2013/04/16 9:24:12 org.apache.catalina.core.ApplicationDispatcher invoke 致命的: サーブレット jsp のServlet.service()が例外を投げました java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 よろしくお願いします

    • ベストアンサー
    • Java
  • booleanの戻り値について

    配列の等価判定をしたいのですが思うように動かないです。 助けてください import java.io.*; class Kadai4 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int[] TBL1; int[] TBL2; TBL1 = new int[5]; TBL2 = new int[5]; boolean flg=true; System.out.println("配列1を入力"); for (int i = 0; i <= 4; i++) { String s1 = br.readLine(); int t1 = Integer.parseInt(s1); TBL1[i] = t1; } System.out.println("配列2を入力"); for (int i = 0; i <= 4; i++) { String s1 = br.readLine(); int t1 = Integer.parseInt(s1); TBL2[i] = t1; } // 配列表示 System.out.println("配列表示"); for (int i = 0; i < TBL1.length; i++) { System.out.print(" TBL1[" + i + "]=" + TBL1[i]); } System.out.println(""); for (int i = 0; i < TBL2.length; i++) { System.out.print(" TBL2[" + i + "]=" + TBL2[i]); } toka(TBL1, TBL2); System.out.println(""); if (flg == true) { System.out.println("配列は等価"); } else { System.out.println("配列は非等価"); } } private static boolean toka(int[] ss1, int[] ss2) { boolean flg = true; for (int i = 0; i < ss1.length; i++) { if (ss1[i] != ss2[i] || ss1.length != ss2.length) { flg=false } } return flg; } }

  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +