先日のグラフ表示プログラムに修正を加えてグラフを縦向きにも表示出来るようにしてみました。
縦向きのグラフを作る上で気をつけなければならないことは空白部分を作る必要があるということですね。
例えば最大値が10までの縦のグラフを作る場合に10のグラフを作るならただ単に同じマークを10回繰り返せば良いので簡単なのですがこれが6とかの場合になると上4つ部分が空白、そして下6つをマークで塗り潰す必要が出てきます。横のグラフでは左上から描画出来る関係上空白は気にしなくて良いのでここがミソですね。
課題では縦向きのグラフが出来ればそれで良かったのですがせっかく横向きグラフも出来るので描画前に表示タイプを選択できるようにしています。
こういったON,OFFの切り替えにはboolean値を使うと良いですね。
要素数を入力しその後falseと入力すれば横向き、trueで縦向きのグラフを表示することが出来ます。
プログラム例
public class IntArrayRand2 {
public static void main(String args[]){
Random rand = new Random();
Scanner std = new Scanner(System.in);
System.out.print("何個作る?:");
int n = std.nextInt();
//n個の配列を作る
int[] a = new int[n];
//配列に1~10のランダムな値を格納する
for(int i = 0; i < n; i++){
a[i] = rand.nextInt(10) + 1;
}
//中身の確認
System.out.println("-------------------------------");
for(int i = 0; i < a.length; i++){
System.out.println("a[" + i + "]の値:" + a[i]);
}
System.out.println("-------------------------------");
System.out.print("表示タイプは?(横:false、縦:true):");
boolean isDisplayType = std.nextBoolean();
if(isDisplayType == false){
//これを横のグラフ状に
for(int i = 0; i < a.length; i++){
//添字の表示
System.out.print("a[" + i + "]:");
for(int j = 0; j < a[i]; j++){
System.out.print("*");
}
//改行
System.out.println();
}
}else{
//10までの数字なのでこれで判定
for(int i = 10; i > 0; i--){
for(int j = 0; j < n; j++){
//マーク
if(a[j] >= i){
System.out.print("+");
}else{
System.out.print(" ");
}
//間の空白(最後は入れない)
if(j < n - 1){
System.out.print(" ");
}
}
//改行
System.out.println();
}
//値表示部
for(int i = 0; i < n; i++){
System.out.print("-");
//間も-で埋める(最後は入れない)
if(i < n -1){
System.out.print("-");
}
}
//改行
System.out.println();
//インデックスを10で割った余剰を表示する
for(int i = 0; i < n; i++){
System.out.print( i % 10);
//間は空白で(最後は入れない)
if(i < n - 1){
System.out.print(" ");
}
}
}
}
}

コメント
Thanks, great article.