>>この記事には書き直した新しいページがあります。<<
<<前 [TOP] 次>>
メモ帳を開いて次のプログラムを作ってみましょう。
【Graph.java】
public class Graph { public static void main( String[] argv ) { int[] a = { 10, 25, 4, 52, 30, 16, 42, 22, 36, 8, 19, 100 }; String[] s = { "1:", "2:", "3:", "4:", "5:", "6:", "7:", "8:", "9:", "10:", "11:", "12:" }; System.out.println( " " + '\t' + "---------+---------+---------+---------+---------+---------+" ); draw( s, a ); System.out.println( " " + '\t' + "---------+---------+---------+---------+---------+---------+" ); } public static void draw( String[] names, int[] data ) { int[] newdata = scaling( data ); for( int i=0; i<data.length; i++ ){ drawLine( names[i], data[i], newdata[i] ); } } private static void drawLine( String name, int value, int count ) { System.out.print( name + '\t' ); for( int i=0; i<count; i++ ) { System.out.print( "*" ); } System.out.println( "(" + value + ")" ); } private static int[] scaling( int[] data ) { double max = (double)max( data ); int[] newdata = new int[ data.length ]; double[] newdata2 = new double[data.length]; for( int i=0; i<data.length; i++ ) { newdata2[i] = (double)data[i]*(60/max); newdata[i] = (int)newdata2[i]; } return newdata; } private static int max( int[] data ) { int max = data[0]; for( int i=1; i<data.length; i++ ) { if( data[i] > max ) max = data[i]; } return max; } }
グラフを表示するプログラムです。
では内容を見ていきましょう。
まず、整数型の配列 int a と、String型の文字列 Srting s がmainメソッドに与えられています。
グラフの目盛をプリントするときに '\t'というのを使っています。
これは、キーボードのTabキーを入力したのと同じ役割をします。
使うときは必ず、シングルコート(’’)で囲んでください。
その他にも、'\n'がよく使われます。
これは、改行すると言う意味で使われます。
drawメソッドで、int newdata = scaling( data )のようにしてscalingメソッドを呼び出し、その戻り値を int newdata に代入しています。
このscalingは後で解説します。
double max = (double)max( data );
これは、maxメソッドに引数として配列dataを渡し、戻り値をdouble型にキャストしてdouble maxに代入しています。
int[] newdata = new int[ data.length ]; double[] newdata2 = new double[data.length];
これは、配列の入れ物だけを用意する方法です。
new演算子を使用し、配列のメモリを確保します。
右辺=new 型名[配列の大きさ数]のように使います。
これによって、まだデータの入っていない箱だけを作成することができます。
newdata2[i] = (double)data[i]*(60/max);
今回は、*の数60個を最大の100とおいて表示するようにしています。
計算式で使われている60はその意味です。
最大の*の数を変えたければ、この数を変えると良いでしょう。
newdata[i] = (int)newdata2[i];
忠実に表示できるように計算でdouble型を使い、int型にキャストして格納しています。
出力結果です。
メモ帳を開いて次のプログラムを作ってみましょう。
【Graph2.java】
public class Graph2 { public static void main( String[] argv ) { int[] a = { 120, 600, 60, 10, 100 }; String[] s = { "A:", "B:", "C:", "D:", "E:" }; draw( s, a ); } public static void draw( String[] names, int[] data ) { int[] newdata = scaling( data ); for( int i=0; i<data.length; i++ ){ drawLine( names[i], data[i], newdata[i] ); } } private static void drawLine( String name, int value, int count ) { System.out.print( name + '\t' ); for( int i=0; i<count; i++ ) { System.out.print( "*" ); } System.out.println( "(" + value + ")" ); } private static int[] scaling( int[] data ) { int[] newdata = new int[ data.length ]; int limit = 10; //グラフの最大の長さ int max = max( data ); for( int i=0; i<data.length; i++ ) { float x = (float)data[i]; float y = x*limit/max; newdata[i] = (int)y; } return newdata; } private static int max( int[] data ) { int max = data[0]; for( int i=1; i<data.length; i++ ) { if( data[i] > max ) max = data[i]; } return max; } }
先ほどのプログラムをもっと簡単に書いてみました。
違うのは次の部分です。
private static int[] scaling( int[] data ) { int[] newdata = new int[ data.length ]; int limit = 10; //グラフの最大の長さ int max = max( data ); for( int i=0; i<data.length; i++ ) { float x = (float)data[i]; float y = x*limit/max; newdata[i] = (int)y; } return newdata; }
ここでは、limitという変数を作りそこにグラフの最大の長さを入れています。
計算にはfloatを使っています。
「//グラフの最大の長さ」という文があります。
これは、コメント文といいます。
ダブルスラッシュ(//)がある後ろの文一行を飛ばして処理を行うようになっています。
このように、プログラムに自分で解りやすいコメントを入れておけば、あとでプログラムを見直るときに便利です。
また、他の人がプログラムを見るときにも解りやすくなります。
そのほかのコメント文
/** * 文章 * 文章 */
このようにしても、文章を飛ばせますし、
/** 文章 */