学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Java | 14 | グラフを表示するプログラム

<<前  [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型にキャストして格納しています。


出力結果です。


Graph.java実行結果
Graph.java実行結果


メモ帳を開いて次のプログラムを作ってみましょう。


【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を使っています。


「//グラフの最大の長さ」という文があります。
これはコメント文といいます。
ダブルスラッシュ(//)がある後ろの文一行を飛ばして処理を行うようになっています。
このようにプログラムに自分で解りやすいコメントを入れておけば、あとでプログラムを見直すときに便利です。
また他の人がプログラムを見るときにも解りやすくなります。


そのほかのコメント文

/**
 * 文章
* 文章
*/

このようにしても、文章を飛ばせますし、

/** 文章 */

このようにしても文章を飛ばせます。


出力結果を見てみましょう。


Graph2.java実行結果
Graph2.java実行結果


↓↓クリックして頂けると励みになります。


<<前  [TOP]  次>>