質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

1325閲覧

whileの条件のつけかた

user1041

総合スコア27

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2015/07/01 13:12

while (DragonMAXHP>0 || DeathMAXHP>0) {

DragonMAXHP -= DragonReceivedamage; DeathMAXHP -= DeathReceivedamage; Debug.Log (DragonMAXHP); Debug.Log (DeathMAXHP); }else break;

DragonMAXHPもしくはDeathMAXHPがどちらかが>0になると、その場で終了させたい
のですが、上記ではエラーがでてしまいます。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

while (DragonMAXHP>0 || DeathMAXHP>0)
この条件だと、どちらかが0以上なら実行されつづけるので、
どっちかが0になったら終わりとするなら
|| を && ですね。

while (DragonMAXHP>0 && DeathMAXHP>0)
これなら両方0以上じゃないと実行されないようになります。

投稿2015/07/01 14:16

MasaakiIrie

総合スコア1021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

else break; が余計なのではないでしょうか.

投稿2015/07/01 13:31

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

user1041

2015/07/01 13:53

たしかにelse break;を削除すれば実行できますが、debuglogを見ると、 60,60,40,40,20,20,0,0 (HPの値)となっているので どちらかが0になったら終わらせたいのですが、継続してるように思います。。
swordone

2015/07/01 14:27

Debug.Logの段階では条件判定されていません. DragomMAXHP,DeathMAXHP(以後,2値)が20の時 1.whileの条件判定→2値とも0より大きいのでtrue,ループ内に入る 2.2値が減算されて0になる 3.Debug.Logにより2値が出力される 4.先頭に戻り,whileの条件判定→2値とも0なのでfalse,ループは処理されず次に進む こういう流れになります.0になったあとの条件判定で抜けてます.
user1041

2015/07/01 16:40 編集

なるほど。解決しました。
guest

0

文法的には、コピペミスでないとしたら、else break;が不要です。

また、ロジック的には、c#のwhileは継続条件を指定しますので
「どちらかが0より大きくなったらループを抜ける」場合は、
「どちらも0以下である場合にループを継続する」という条件を指定する必要があります。
つまり
while(DragomMAXHP <= 0 && DeathMAXHP <= 0)
{
}
という感じです。
今の条件式全体に!演算子を付けても構いません。

変数の符号が分からないのでなんとも言えませんが、なんとなく不等号が逆の気が…。

投稿2015/07/01 13:31

wakuwaku

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wakuwaku

2015/07/01 13:35

すいません。完全に勘違いしてました。 「変数の符号が分からないのでなんとも言えませんが、なんとなく不等号が逆の気が…。 」と書きましたが、 私の頭の中が逆でした。 目的の動作は else break; を削除すれば実現できますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問