前提・実現したいこと
関数next内の前半のfor文と後半の入れ子になっているfor文を一つの入れ子になっているfor文にまとめたいです。
なんかかっこ悪いのでスマートな書き方があったら教えてください。
hyoはvかけるvの二次元配列
now_gyo,now_retuはグローバル変数
気持ちとしては今の座標をもとに次?の座標(-1,0でないもの)をもとめる感じです
例えばv=5の以下の表でnow_gyo=1 , now_retu=2なら実行後はnow_gyo=2 , now_retu=4になってほしいです。
0 -1 -1 5 -1
-1 0 -1 4 5
-1 -1 0 2 -1
-1 -1 -1 0 -1
-1 -1 -1 -1 0
該当のソースコード
java
1 2 import java.util.Arrays; 3 4public class hogehoge { 5 public static int now_gyo=1; 6 public static int now_retu=2; 7 public static int v=5; 8 public static void main(String[] args) { 9 next(); 10 11 } 12 public static void next() { 13 14 int[][] hyo=new int[][]{ 15 {0 ,-1, -1 , 5 ,-1}, 16 {-1 , 0, -1 , 4 , 5}, 17 {-1 ,-1, 0 , 2 ,-1}, 18 {-1 ,-1, -1 , 0 ,-1}, 19 {-1 ,-1, -1 ,-1 , 0} 20 }; 21 for (int i = now_retu+1; i < v; i++) { 22 if(hyo[now_gyo][i]==-1){ 23 now_retu=i; 24 return; 25 } 26 } 27 for (int i = now_gyo+1; i < v; i++) { 28 for (int j = i+1; j < v; j++) { 29 if(hyo[i][j]==-1){ 30 now_gyo=i; 31 now_retu=j; 32 return; 33 } 34 } 35 } 36 } 37} 38
質問のコードには、now_gyo も now_retu もありません。
return していますが、x が結果ですか?
スマートに書く前に、2つの for文を使った、動くコードがあるはずです。
そのコード全体を見せてください。質問は編集できます。
2次元がダメなら1次元の重なりと見れば良いのではないでしょうか。
返信ありがとうございます
コード全体に書き換えました。
以前の部分的なコードはまちがっていてのxをnow_gyo、yをnow_retuに置換したものが正しかったです。
よくみるとfor文2つという日本語が正しいかは微妙ですね・・・あとで質問文を変えます。
やりたいことは前半のfor文と後半の入れ子になっているfor文を一つの入れ子になっているfor文にまとめたいので、多分、1次元の重なりと見る必要はないと思います。入れ子部分を入れ子ではない文にしたいわけではないので・・・
入れ子部分を入れ子ではない文にしたい場合、1次元の重なりとみる案はありだと思います。数学的にはできそうです。
ただ、hyoの左下の-1でできた三角形の部分を無視したいので for文内のi, jをどう変えていけばいいかよくわかんないです。具体的なやり方があればそれについても教えてください
> now_gyo=1 , now_retu=2なら実行後はnow_gyo=2 , now_retu=4
となっていますが、例えば hyo が
{ 0, 1, 1, 5, 1 },
{ -1, 0, -1, 4, 5 },
{ -1, -1, 0, 2, 1 },
{ -1, -1, -1, 0, -1 },
{ -1, -1, -1, -1, 0 }
として now_gyo=0 , now_retu=3なら、now_gyo=1 , now_retu=2となるのは正解でしょうか。
回答2件
あなたの回答
tips
プレビュー