2次元配列演習

Java

以下の問題を解きながら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);
    }
  }
}
Java
スポンサーリンク
シェアする
mjpurinをフォローする
ジョイタスネット

コメント

タイトルとURLをコピーしました