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