表の縦と横の合計を出したいあるある、Javaで

恵方巻きの季節が、今年もやって来~る、数学の知識が欲しいと思い続けて、15年、どうも、ボクです。

というわけで、久々に、AIZU ONLINE JUDGEです。

f:id:ts0818:20190201222002p:plain

Javaです。そんでは、レッツ~トライ。

 

実際に試してみる

問題としては、

f:id:ts0818:20190201224915p:plain

⇧ という感じです。

やりたいこととしては、入力された数字を表で表現するってことなんですが、

f:id:ts0818:20190201222940j:plain

⇧  みたいなイメージです。

では、Eclipseで適当なJavaプロジェクトを作成し、クラスを作成し、

f:id:ts0818:20190201223437p:plain

ソースは、こんな感じ、むっちゃ汚い...ドンマイと自分に言い聞かせる。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestSpreadSheet {

  public static void main(String[] args) throws IOException {
    // TODO 自動生成されたメソッド・スタブ
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

    // 標準入力の値を、半角スペースで分割
    String[] inputRowAndCol = (input.readLine()).split("\\s");
    int row = Integer.parseInt(inputRowAndCol[0]); // 行
    int col = Integer.parseInt(inputRowAndCol[1]); // 列

    // 表
    int[][] matrixA = new int[row +1][col +1];
    // 縦の合計用
    int[] colSum = new int[col +1];
    // 横の合計用
    int[] rowSum = new int[row +1];
    // 入力された、1行の数字を格納する用
    String[] number = null;

    // 表の行数だけ繰り返し
    for (int i = 0; i < matrixA.length; i++) {
      // 最終行以外は、入力された行の数字を処理
      if (i != matrixA.length -1) {
        number = (input.readLine()).split("\\s");
      }
      // 表の列数だけ繰り返し
      for (int j = 0; j < matrixA[i].length -1; j++) {
        // 最終行以外は、合計していく
        if (i != matrixA.length -1) {
          rowSum[i] += Integer.parseInt(number[j]);
          colSum[j] += Integer.parseInt(number[j]);
        }
        // 最終行の行の合計
        if (i == matrixA.length -1 && j == matrixA[i].length -2) {
          for (int m = 0; m < rowSum.length; m++) {
            matrixA[i][j +1] += rowSum[m];
          }
          // 最終行以外の行の合計
        } else if (j == matrixA[i].length -2) {
          matrixA[i][j +1] = rowSum[i];

        }
        // 列の合計
        if (i == matrixA.length -1) {
          matrixA[i][j] = colSum[j];
        // 表に値を入れていく
        } else {
          matrixA[i][j] = Integer.parseInt(number[j]);
        }

      }
    }

    for (int k = 0; k < matrixA.length; k++) {
      for (int l = 0; l < matrixA[k].length; l++) {
        System.out.print(matrixA[k][l]);
        if (l != matrixA[k].length -1) {
          System.out.print(" ");
        }
      }
      System.out.println();
    }


  }

}
    

実行してみます。

f:id:ts0818:20190201223622p:plain

コンソールに、適当な数字を、間に半角スペースを入れて、2つ入力。最初の数字が行数、2つ目の数字が列数。

f:id:ts0818:20190201223658p:plain

Enter押してから、入力した列数だけ、間に半角スペースで区切って数字を入力しEnter。行数だけ繰り返し。

f:id:ts0818:20190201224028p:plain

という感じで、期待した結果が得られました。

決められたルールで入力しないと、落ちますね...ポンコツなプログラムですな...

f:id:ts0818:20190201224230p:plain

まぁ、一応、OKが出たので、良いんですかね...

f:id:ts0818:20190201225213j:plain

f:id:ts0818:20190201225258p:plain

 

というわけで、今日もプログラムの技術が上がっていないのであった...

今回はこのへんで。