以下の問題を解きながら2次元配列の理解を深めよう
問題
int型2次元のジャグ配列を作成し、以下の処理を実現せよ。
月の売上表を以下のように作成せよ 1日の売上は10-50のランダム 月の日数は1,3,5,7,8,10,12 は31日 2は28日 それ以外は30日する 月の終わりにはその月の合計を出力する なお、表示の際,31日に満たない月は足りない分を*で埋めること
[実行例]

解答例
import java.util.*;
public class Sales {
public static void main(String[] args) {
//ランダムを使えるようにする
Random rand = new Random();
//12行31列の2次元配列を作成
int[][] sales=new int[12][31];
//月の日数配列
int[] days={31,28,31,30,31,30,31,31,30,31,30,31};
//データ作成
for(int i=0;i<sales.length;i++){
for(int j=0;j<days[i];j++){
sales[i][j]=rand.nextInt(41)+10;
}
}
//データ出力
for(int i=0;i<sales.length;i++){
System.out.printf("%2d|",i+1);
int mTotal=0;
for(int j=0;j<sales[i].length;j++){
mTotal+=sales[i][j];
System.out.printf("%3s",sales[i][j]==0? "*":sales[i][j]+"");
}
System.out.printf("|%4d%n",mTotal);
}
}
}ジャグ配列
先程は足りない日付を*で埋めたがその部分をなくしてみよう。つまり以下のような実行結果になる

import java.util.*;
public class SalesApp {
public static void main(String[] args) {
Random rand =new Random();
//2次元配列を準備
int[][] sales=new int[12][];
//月の日数配列
int[] days={31,28,31,30,31,30,31,31,30,31,30,31};
//2次元配列なので2重forを組む
for(int i=0;i<sales.length;i++){
sales[i]=new int[days[i]];
for(int j=0;j<days[i];j++){
sales[i][j]=rand.nextInt(41)+10;
}
}
//デバッグプリント
//System.out.println(Arrays.deepToString(sales));
//出力
for(int i=0;i<sales.length;i++){
System.out.printf("%2d|",i+1);
int mTotal=0;
for(int j=0;j<sales[i].length;j++){
mTotal+=sales[i][j];
System.out.printf("%3d", sales[i][j]);
}
System.out.printf("|%4d%n",mTotal);
}
}
}

コメント