teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/03/25 08:26

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  もし行の長さが(前提A)「r行の長さはr+1行の長さより常に大きい」という仮定を置くなら(rowLengthsDecreaseがtrueとなる行列という仮定)、一番外側のループは
4
4
 
5
- `for (int j = 0; j < t[0].length; j++;){`
5
+ `for (int j = 0; j < t[0].length; j++){` <=(最初の回答で余計な';'がありました。訂正しました)
6
6
 
7
7
  でなければならないでしょう。オリジナルのコードは何列ループするかの上限をt[j].lengthとしていますがそれはi行目の列数が「トータルの列数と同じである」という前提が成立しなければ正しいとは言えなくなり、それは即ち「全部の行の列数が同じでなければ正しい条件判定とはいえなくなる」のであまり意味のある判定にならないことがおわかりでしょうか?
8
8
 
@@ -10,5 +10,18 @@
10
10
 
11
11
  `for (int i = 1; j < t[i].length; i++) {`
12
12
 
13
+ ---
14
+ 補足:内側のループの意図がこの回答のままではわかりにくかったようなのでコードのイメージも載せてみます。念のためこのコードは(前提A)のものです。他のみなさんはより前提条件をより緩和した回答を載せておられるので区別してください。
13
15
 
16
+ ```java
17
+ for (int j = 0; j < t[0].length; j++) {
18
+ // 0行目が一番長いという仮定を置いたので1行目からループ
19
+ for (int i = 1; j < t[i].length; i++) {
20
+ if (t[i - 1][j] >= t[i][j]) // 直前の行と比較
21
+ return false;
22
+ }
23
+ }
24
+ return true; //全てのチェックをパスしたらtrueを返す
25
+ ```
26
+
14
27
  蛇足:本件には関係ないですが綴りミスdimentionalを見つけました・・・