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

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

Java | 16 | グラフ表示

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



15 | サイコロゲーム】 << 【ホーム】 >> 【17 | 二次元配列


グラフを表示するプログラム
グラフを表示するプログラム



今まで学習してきた内容を踏まえ、簡単なグラフを表示させるJavaプログラムを作成します。
Visual Studio Codeで以下の「Graph.java」ファイルを作成して下さい。


新規作成 【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 に代入しています。

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


Javaプログラムをコンパイルして出力結果を確認します。

~/Desktop/Programming/JP $ javac Graph.java
   
~/Desktop/Programming/JP $ java Graph      
        ---------+---------+---------+---------+---------+---------+
1:      ******(10)
2:      ***************(25)
3:      **(4)
4:      *******************************(52)
5:      ******************(30)
6:      *********(16)
7:      *************************(42)
8:      *************(22)
9:      *********************(36)
10:     ****(8)
11:     ***********(19)
12:     ************************************************************(100)
        ---------+---------+---------+---------+---------+---------+



作成した「Graph.java」ファイルを書き換えます。
Visual Studio Codeで以下の「Graph2.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を使っています。


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


そのほかのコメント文

/**
 * 文章
* 文章
*/

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

/** 文章 */

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


Javaプログラムをコンパイルして実行結果を確認します。

~/Desktop/Programming/JP $ javac Graph2.java

~/Desktop/Programming/JP $ java Graph2      
A:      **(120)
B:      **********(600)
C:      *(60)
D:      (10)
E:      *(100)




15 | サイコロゲーム】 << 【ホーム】 >> 【17 | 二次元配列




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