2016-12-12 2 views
-4

Код ниже - это фрагмент рабочего кода, который предназначен для игры в лабиринте замка в C#. Структура if else только правильно печатает dun.roomend == true). Буксировка. В настоящее время отображается, когда должен отображаться файл tre.isExit. Файл tre.isExit не отображается вообще. Я предрек текущие переменные как:если инструкция else не работает

public bool isExit; 
public bool deadEnd; 
public bool roomEnd; 

tre.isExit = true; 
dun.deadEnd = true; 
tow.roomEnd = true; 

if (dun.roomEnd == true) 
{ 
    Console.WriteLine("You've fallen into the Dungeons of the Dead. Try again"); 
    return; 
} 

if (tow.roomEnd == true) 
{ 
    Console.WriteLine("You been caught by the Kings guard and have been placed in the tower for life.Try again"); 
    return; 
} 
else if (tre.isExit == true) 
{ 
    Console.WriteLine("You have found the treaure... now run!!"); 
    return; 
} 
else 
{ 
    Console.WriteLine("Too scared....."); 
} 
+3

Посмотрите на свой код и пройдите через него с помощью отладчика и обратите внимание на значения bool, которые просто смотрят на ваш код, он всегда будет первым и последним. – MethodMan

+2

Я вижу, что на ваш вопрос был дан ответ, но только совет по вашему синтаксис. При оценке значений bool в операциях if нет необходимости использовать оператор '=='. Вместо этого в вашем случае вы можете просто написать 'if (dun.roomEnd) {}', и это будет делать то же самое, что и 'if (dun.roomEnd == true) {}'. Аналогично, чтобы проверить, является ли это ложным, используйте '!' (Известный как нет) перед вашей переменной bool. Поэтому важно, чтобы if (! Dun.roomEnd) 'был таким же, как' if (dun.roomEnd == false) '. –

+0

Thanx для этого, это было очень полезно. Все еще борется с ответом, так как его не работает –

ответ

4

Это потому, что вы сразу же вернуться, когда один из ваших условий верно.

// Don't explicitly compare to true - just write if (dun.roomEnd) 
if (dun.roomEnd == true) 
{ 
    Console.WriteLine("You've fallen into the Dungeons of the Dead. Try again"); 
    // You end the method here, so none of the rest of the code after this will execute 
    return; 
} 

Кроме того, тот факт, что вы делаете

else if (tre.isExit == true) 

означает, что это не будет выполняться, если

tow.roomEnd == true 

также верно. «Иначе, если» означает «если текущее условие истинно и предыдущее условие ложно», так

if (A) { 
    // do work 
} 
else if (B) { 
    // Do work 
} 

семантически эквивалентно

if (A) { 
    // Do work 
} 

if (!A && B) { 
    // Do work 
} 

Наконец, я упомянул об этом мимоходом, но Я хотел бы подчеркнуть, что это не нужно явно сравнить true или false, так

if (tow.roomEnd == true) 

должен быть только

if (tow.roomEnd) 

Кроме того, я не думаю, что смысл всех этих условий имеет смысл сразу. Может что-то на самом деле быть конец комнаты, тупик и выход в то же время? Как минимум, кажется, что конкретное место не может быть как выходом, так и тупиком. Если данные говорят, что сразу несколько из них истинны, это needs to be corrected, чтобы программа функционировала должным образом.

+0

удаление двух возвращаемых значений перед else if, приводит к тот же результат, что и раньше, с возвращаемыми значениями –

+0

, убедитесь, что вы перестроили проект после внесения этого изменения. Или сохраните файл. Какую среду разработки вы используете? –

+1

@AmberDyer Поскольку у вас есть 'else if (tre.isExit == true)' вместо просто 'if (tre.isExit == true)'. 'else if (tre.isExit == true)' * only * запускается, когда 'tow.roomEnd == true' является ложным, но ваш пример имеет все значение true. – Quantic

1

В каждом операторе if имеется ключевое слово return;. Оператор return завершает выполнение метода, и из-за этого отображается только первая консоль. WriteLine.

Читайте внимательно: return (C# Reference)

0

Читая то, что вы сделали, если я правильно это понять, что вы после этого заключается в следующем.

public bool isExit; 
public bool deadEnd; 
public bool roomEnd; 

tre.isExit = true; 
dun.deadEnd = true; 
tow.roomEnd = true; 

if (dun.roomEnd == true) 
{ 
    Console.WriteLine("You've fallen into the Dungeons of the Dead. Try again"); 
} 
else if (tow.roomEnd) 
{ 
    Console.WriteLine("You been caught by the Kings guard and have been placed in the tower for life.Try again"); 
} 
else if (tre.isExit) 
{ 
    Console.WriteLine("You have found the treaure... now run!!"); 
} 
else 
{ 
    Console.WriteLine("Too scared....."); 
} 

return 

Это будет оценивать каждое условие индивидуально, а затем возвращаться после завершения.

Что означает этот код: «если условие 1 истинно, отобразите текст и выйдите из блока if, а затем верните. В противном случае, если условие 2 истинно, сделайте то же самое, условие 3/4 сделает то же самое.

Я думаю, что это то, что вы после этого, по крайней мере. это может быть переработан, чтобы сделать его немного проще, но не имеют времени, чтобы пройти через это в данный момент.

+0

Спасибо за это, я очень благодарен за это. Его по-прежнему показывают неправильные сообщения, но я буду продолжать играть с ним и надеяться, что это сработает –

0

Предполагая, что он показывает Dungeons of the Dead и Kings Guard, вам нужно добавить «else» в if для tow.roomEnd.

Смежные вопросы