質問: 0; j < a[i]; j++) System.out.print('*'); System.out.println(); } } }
回答: まずもって、質問のプログラムがどのような処理を行っているか? まず、コマンドラインで数字を入力させ、その数字が配列の要素数になっている。 例.要素数: 3 ↓ 配列の各要素に乱数で生成された整数を代入している 例 a[0]=4,a[1]=7,a[2]=5 ↓ 配列の要素番号順に各要素の数字文だけ*を出力している 例 a[0]=4なので **** a[1]=7なので ******* a[2]=5なので ***** 結果 **** ******* ***** になる ここで、問題としてグラフを縦にしたい。 図↓(nは空欄) n*n n*n n** *** *** *** *** しかし、上記のやりかたでは左から数字分だけ出力なので*の左側を空欄にすることができない。 その問題の解決策を自分の書いたソースコードを参照しつつ解説します。 public class Graph{ public static void main(String[] args){ Random rand=new Random(); Scanner stdIn=new Scanner(System.in); System.out.print("要素数 : "); int n=stdIn.nextInt(); int[] a=new int[n]; //配列aの最大値 int max=0; for(int i=0;imax){ max=a[i]; } } ---------------------------------------------------------------- 例えば、a[0]=2,a[1]=5,a[2]=3という配列があったらそれを ftf ftf ftt ttt ttt(tはtrue,fはfalse) といった内容のboolean型の2次元配列にしてしまいましょう これを2重forループでまわし、 trueの時は"*"をfalseの時は" "(空欄)を出力すればよいのです ---------------------------------------------------------------- boolean[][] prot=new boolean[max+1][n]; for(int i=0;i