LoginSignup
coruseaf4u
@coruseaf4u

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

JAVAで二次元配列を行、列ごとに最大最小を出力したい

a.PNG

解決したいこと

JAVAで二次元配列を行ごとに出力してその行の末尾に最大値、最小値をつけ
全出力の最後に列ごとの最大最小を出力させたい。

その中でそもそもそれ以前の入力を受けるスキャナーあたりもこれでよいのか
教えていただきたいです。

JAVA初学者です。二次元配列全体で最大値、最小は出るのですがこれを行ごとに出したいです。Something went wrong

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。
Math.maxや取得したい値を数列を入力する時点で取得するようにしてもうまくいきませんでした

0

1Answer

現行コードの問題点

  1. ima, imnの初期化が行単位で行われない
    1. Math.maxでうまくいかなかった理由もこれです
    2. 現行コードは常に最後の行(3行目)の最大値、最小値が出力されていた状況でした
  2. 入力値がすべて1001以上だった場合に最小値が1000になる(入力条件に1000までとされているなら大丈夫です)
    1. Integer.MIN_VALUEInteger.MAX_VALUEを使っていますが、numbers[i][0]を入れるのも良いかと思います。
  3. 最後のループは不要
  4. Scannerは一応閉じる
  5. 変数名の命名ルールが微妙
    1. Javaの変数名は小文字始まりのキャメルケースが基本です
    2. imaは何の省略名かわからないので素直にrowMaxとかにしましょう
  6. インデントが正しくない
    1. Eclipseであれば「Ctrl + Shift + f」でフォーマットできるので実施しましょう
      1. どこまでがfor文の中かがわかりやすくなります

ということで修正したコードが以下です。

import java.util.Scanner;

public class Test4_2 {
  public static void main(String[] args) {
    int[][] numbers = new int[3][5];
    try(Scanner sc = new Scanner(System.in)) {
      for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
          System.out.println("Array[" + i + "][" + j + "] = ");
          numbers[i][j] = sc.nextInt();
        }
      }
    }catch (Exception e){
      e.printStackTrace();
    }
    System.out.println("Array List & MAX/MIN Display.");
    for (int i = 0; i < numbers.length; i++) {
      int rowMax = Integer.MIN_VALUE;
      int rowMin = Integer.MAX_VALUE;
      for (int j = 0; j < numbers[i].length; j++) {
        int currentNumber = numbers[i][j];
        if(rowMax < currentNumber){
          rowMax = currentNumber;
        }
        if(rowMin > currentNumber){
          rowMin = currentNumber;
        }
        System.out.print(currentNumber + " ");
      }
      System.out.println("最大値:" + rowMax + "/最小値:" + rowMin);
    }
  }
}

1

Comments

  1. @coruseaf4u

    Questioner
    回答ありがとうございます。
    変数名等はなんとなくでつけていたので参考になりました。
    プログラムやファイル名で特徴的な名前になっている理由はキャメルケースやスネークケース,ケバブケースなどある程度決まりがあるからなのですね。

    その他にはforやifの継続条件や分岐が曖昧で混乱した結果不要なループなどが生まれていたのでアルゴリズムなどを勉強して流れ図も少しやってみます今回はありがとうございました。

Your answer might help someone💌