2013-11-07 2 views
2

-> Ошибка 'Minesweeper.Game.Gewonnen()': не все пути кода возвращают значение.Что они означают, когда «не все пути кода возвращают значение»?

Что я делаю неправильно?

public bool Gewonnen() 
{ 

    for (int y = 0; y < _boolArray.GetLength(0); y++) 
    { 
    for (int x = 0; x < _boolArray.GetLength(1); x++) 
    { 
     if (_boolArray[x, y] == false) 
     return false; 

     else 
     return true; 
    } 
    } 
} 
+0

Вы уверены, что вы только хотите, чтобы первым узнать о нем? Ваш код проверяет только '_boolArray [0, 0]' и сразу возвращается. – Groo

ответ

8

Это означает, что не все возможные пути выполнения возвращают значение. В вашем примере цикл может не выполняться даже один раз (когда длина _boolArray равна 0), и если это произойдет, ваш метод ничего не вернет. Добавить return false в конце метода:

public bool Gewonnen() 
{ 
    for (int y = 0; y < _boolArray.GetLength(0); y++) 
    { 
     for (int x = 0; x < _boolArray.GetLength(1); x++) 
     { 
       if (_boolArray[x, y] == false) 
        return false; 
       else 
        return true; 
     } 
    } 

    return false; 
} 
+0

Спасибо, это работает. Но теперь у меня есть другая проблема. Это в моем основном классе: while (spiel.Gewonnen = false) { Console.WriteLine («Y Koordinate?»); int yeingabe = int.Parse (Console.ReadLine()); Console.WriteLine («X Koordinate?»); int xeingabe = int.Parse (Console.ReadLine()); spiel.EingabeWeiterLeiter (yeingabe, xeingabe, anzahlMinen); } -> Ошибка: Невозможно присвоить «Gewonnen», потому что это «групповой метод» он должен повторить цикл игры, до тех пор пока игра выиграна –

+1

Две проблемы. Во-первых, это 'spiel.Gewonnen()', а не 'spiel.Gewonnen'. Во-вторых, это '==', а не '='. Вы также можете написать это как 'while (! Spiel.Gewonnen()) {/ * do stuff * /}'. – Groo

+1

Пожалуйста, создайте еще один вопрос, потому что чтение кода из комментария - это боль. – gzaxx

0

Предположим, например, что ваш первый для цикла будет в какой-то момент что-то вроде:

for (int y = 0; y < _boolArray.GetLength(0); y++) { } 

и в этот момент ваш _boolArray имеет длина 0. затем он будет приводить к

for (int y = 0; y < 0; y++) { } 

это означает, что он немедленно сделал этот кусок кода, подходя к концу цикла. Но подождите: эта функция должна была возвращать логическое значение, и возврат невозможен.

Это вкратце означает, что «не все кодовые пути возвращают значение» означает. Вам не разрешено иметь какую-либо (маловероятную?) Комбинацию значений, которая заставит вас закончить функцию, не возвращая значение типа mentoin в функции (boolean в этом случае).

1

Решение gzaxx будет скомпилировано. В любом случае, я не уверен, что это то, что вы хотите, потому что в этом случае он всегда будет возвращаться после первой итерации (если есть). Вот еще одна попытка (надеюсь, это поможет):

public bool Gewonnen() 
{ 

    for (int y = 0; y < _boolArray.GetLength(0); y++) 
    { 
    for (int x = 0; x < _boolArray.GetLength(1); x++) 
    { 
     if (_boolArray[x, y] == false) 
     return false; 
    } 
    } 

    return true; //this mean _boolArray has no false value 
} 
Смежные вопросы