• ベストアンサー

九九の表

を作るプログラムなんですが結果がずれて表示されるんですがどうせればきれいにそろうんでしょうか?? いくらやっても上手くいきません・・・。 どなたかヒントもらえませんか。 \tを試して一応そろったんですがもっとコンパクトな表示結果にしたいんです。 プログラムはこんな感じです。 public class Kukuhyou3 { public static void main(String[ ] args) { int i,j,kekka; System.out.println(" | 1 2 3 4 5 6 7 8 9"); System.out.println("--+----------------------------"); for(i = 1;i < 10;i++) { System.out.print( " "+ i +"|"); for(j=1; j < 10; j++) { kekka=i * j; System.out.print(" "+kekka); } System.out.println(""); } } }

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

  • ベストアンサー
回答No.5

2次元配列を使用してみました。目下、デザインパターンの勉強中で、tatsu99さんみたいに抽象化、再利用性の高いものはできないのですが、以下のソースなどを元にして、他人のプログラムを読み取る、という能力も同時に身に付けてもらえたら、と思います。 public class Kukuhyou3 { public static void main(String[] args) { int kuku [][] = new int[9][9]; System.out.println(" | 1 2 3 4 5 6 7 8 9"); System.out.println("--+----------------------------"); for(int i = 1;i < 10;i++) { System.out.print( " "+ i +"|"); for(int j=1; j < 10; j++) { // 答えが1桁の時のみ、前にも空白を入れます。 Figure blank = new Figure(10); blank.judge(i,j); kuku[i-1][j-1] =i * j; System.out.print(" "+kuku[i-1][j-1]); } System.out.print("\n"); } } } class Figure { private int nbsp; public Figure(int _nbsp){ this.nbsp = _nbsp; } public void judge(int i,int j){ if(i*j < nbsp) System.out.print(" "); } }

その他の回答 (5)

回答No.6

#3のjchさんのソースを勝手に借りて、ちょこっとだけ修正してみました。 public class Tkin { public static void main(String[] args) { for(int i=1; i < 10 ; i++) { for(int j = 1 ; j < 10 ; j++) { System.out.print(j+"*"+ i + "="); // 答えが1桁の時のみ、前にも空白を入れます。 if(i*j < 10) System.out.print(" "); System.out.print(i*j + " "); // 九九表が直角三角形になるので、却下。 // if(i == j) { // System.out.println(); // break; // } } // 次の行へ移動。 System.out.print("\n"); } } }

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

#2のかたが言われているようにjdk1.5からは、簡単にこのような整形出力ができるようになりましたが、jdk1.5以前では、このての処理が、javaでは簡単にできません。残念ながら、自力で整形出力するクラスを作り上げるしかありません。 自力で作成したForamatIクラスは、最初に、最大の桁数を指定すると、最大桁数に満たない数値については、空白を補填して、文字列にして返す機能を持っています。 package mypackage; public class FormatI { int maxdigit; // 最大の桁数 public FormatI( int inte ) { maxdigit = inte; //最大の桁数 } public String format( int number ) { Integer num = new Integer(number); String snum = num.toString(); int sa = this.maxdigit - snum.length(); String s = ""; // 指定桁数に満たない場合はブランクを出力 for(int i = 0 ; i < sa ; i++ ) { s += " "; } s += snum; return s; } } ---------------------------------------- import mypackage.FormatI; public class Sample { public static void main(String[] args) { int i,j,kekka; System.out.println(" | 1 2 3 4 5 6 7 8 9"); System.out.println("--+----------------------------"); for(i = 1;i < 10;i++) { System.out.print( " "+ i +"|"); for(j=1; j < 10; j++) { kekka=i * j; FormatI intf = new FormatI(3); String ret = intf.format(kekka); System.out.print(ret); } System.out.println(""); } } }

  • jch
  • ベストアンサー率38% (7/18)
回答No.3

public class Tkin { public static void main(String[] args) { for(int i=1; i < 10 ; i++) { for(int j = 1 ; j < 10 ; j++) { System.out.print(j+"*"+ i + "=" + (i*j)); if(i*j < 10) { System.out.print(" "); } else { System.out.print(" "); } if(i == j) { System.out.println(); break; } } } } }

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

java1.5だったら System.out.print(" "+kekka); を System.out.printf(" %2d",kekka); に代えればいいかと思いますが、 kekkaを文字列にした時1文字なら前にスペースを補うという方法で String disp = ""+kekka; if(disp.length()==1)disp=" "+disp; とすればいいと思います。

回答No.1

(回答した後にエラーが発生したので、2重回答になっていたらごめんなさい。) 結果 kekka の桁数を判別して、桁数に見合った数の半角スペースを間に入れればいいんじゃないかな。