2017-10-29 15 views
0

私はコーディングが新しく2ヶ月以上コーディングしていません。 私の割り当てには、私は迷路アルゴリズムをエスケープしています。 ユーザが2D配列と開始点を定義している場合、プログラムはその出口を見つけるために最も危険な経路をとらなければなりません。 "AI"はは北、東、南または西に移動することができます。アレイの端から逃げることができます。この例では配列の隣接する場所内の最小値を見つける

Enter the starting x coordinate: 2 
Enter the starting y coordinate: 4 
0 1 4 2 6 0 1 
1 7 4 2 2 6 0 
0 0 0 8 * 4 1 
1 1 2 7 3 4 2 
5 1 6 4 2 2 1 

、ユーザは、(索引付けは0から始まり、覚えている)配列の開始位置として、[2,4]を選択しました。 AIはアレイの端から逃げることができます。それぞれの動きに対して最小の整数を選びたいと思っています。この例では、AIは最大2、次に左、次に上に移動します。したがって、配列を終了するには、「6ダメージ」の合計量が必要でした。

私の問題は、北は東よりも小さいかどうかを比較し、北は東よりも小さい場合、それは西よりも小さいのですか?または南?東が北より小さければ、それは西よりも小さいのだろうか?または南? &などがあります。 正しい方法でこれを実行するかどうかはわかりません。 私の試みは、下記のhastebinリンクの44〜78行目にあります。 私は何をしているのか分かりません。

私はint minimumValue;を作成しましたが、それをどのように利用するのか、またはどこで利用するのかはわかりません。 boardArray[north][currentY] < boardArray[east][currentY]の場合は、boardArray[north][currentY]は私の新しい最小値ですか?それから西と南を比較してコードを書く必要があります。私はそれについてもっと簡単な方法があるように感じる。

私は解決策を見つけました、Reddit、The Coding Den discord server。しかし、私は単にこの問題を解決できません。

何かすべてのヘルプは高く評価されます!

https://hastebin.com/acopoborut.java

+1

"最も危険なルート"とは、 "北は東よりも小さいかどうか"をどのように比較できますか?問題の定義は明確ではありません。 – alfasin

+0

ようこそStackoverflowへ。アルファシンが言ったことは本当です。問題の定義が明確ではありません。コメントセクションに投稿した内容であなたの答えを更新してください。また、44〜78行目のように、質問自体に問題を定義する際に重要と思われるコードスニペットを投稿してください。これは、他の人が今まで試みたことをすばやく通過するのに役立ちます。 –

+0

あなたはまだ「最悪の経路」とは何を意味するのか、どこからどこまでの経路を説明していないのですか?エントリーポイントはどこですか?出口ポイントはどこですか?どのようにそれらを決定するのですか?サジブが書いたように、コメント欄ではなく、記事自体の問題の説明を改善してください*。あなたがあなたの質問を理解しやすくすることを迷惑にならないようにして、人々があなたを助けてくれることはありません...私たちがあなたを助けてください! – alfasin

答えて

0

聖ネストされた他の人のバットマンを取得すると、アレイ内の両方である場合は、最初に確認する必要があります。もちろん、この

boardArray[x][y-1] < boardArray[x+1][y] //Is North smaller than East? 

ようにそれらを比較することができます!

私はこのような何かをライン55から78に代わる:moveDirectionsは

visitedPath = visitedPath + "[" + currentX + "," + currentY + "]";  

のようなあなたのコードになると危険値が

boardArray[north][currentY] 
のようなあなたのコードです

//find the least danger: 
int leastDanger = northDanger; 
if(southDanger < leastDanger) leastDanger = southDanger; 
if(eastDanger < leastDanger) leastDanger = eastDanger; 
if(westDanger < leastDanger) leastDanger = westDanger; 
// Go the first direction equal to least danger 
if  (northDanger == leastDanger) { moveNorth 
}else if(southDanger == leastDanger) { moveSouth 
}else if(eastDanger == leastDanger) { moveEast 
}else if(westDanger == leastDanger) { moveWest 
} 

スイッチ文を知っている場合は、switch文を使用して実行することもできます。

+0

これは20分後に起こる予定です。私はStackoverflowに相談するには時間がかかりましたので、ちょうど部分的なクレジットを取ることになります。 しかし、私はまだ自分の学習のためにこれを完了したいと思います。 minValue(leastDanger)を最初に「Integer.MAX_VALUE」に設定することは完全に検討されましたが、エッジケースをテストしている誰かが自分の配列にばかばかしい整数を入力することを決定した場合はどうなりますか? northDangerとeastDangerが同じ整数の場合はどうなりますか? –

+0

Integer.MAX_VALUEから始めることは素晴らしい考えです。ユーザーはアレイ内の値よりも大きいばかげた値を入力することはできません。上記のようにコード化されていれば、leastDangerと一致する最初の方向をとる。 northDangerとeastDangerがどちらも最低危険に等しいならば、北に行くでしょう。 – JeffBship

+0

私は参照してください。ありがとうございました!私はここからそれを理解しようとします。私はそれをたくさんありがとう! これが私の頭の中に流れているような形になっていないかどうかを報告するかもしれません。 –

0

私はあなたが参照あなたが-y方向と東を指す北言って仮定する+ X方向

boardArray[x][y](x、y)は座標表す場合、それの北あるべき座標(x、y-1)であり、eastは(x + 1、y)である。あなたは北と東がそうでなければ、あなたがArrayIndexOutOfBoundException

+0

ああ、私のN/E/S/Wのパラメータは後方ですか?謝罪いたします。私はx + -1が上下に対応しているという印象を受けました。 さて、私は正しく比較を行った。 しかし、北は東よりも小さくないとどうなりますか? (boardArray [x + 1] [y]

+0

あなたの質問では北と西と南を比較し続けていると言っています。 "north> = east"の場合は何も起こりません。 – Judger

+0

eastはy軸を西にしてから 'boardArray [currentX] [currentY]'ではなく 'boardArray [currentX] [east]'でなければなりません。 east – Judger

関連する問題