2015-02-28 3 views
-3
static int CountMinesLeft(string[,] board, string[,] visibilityArray, int count) 
{ 
    if (visibilityArray.Length == 81) 
    { 
     count = 10; 
    } 
    else if (visibilityArray.Length == 256) 
    { 
     count = 40; 
    } 
    else if (visibilityArray.Length == 480) 
    { 
     count = 99; 
    } 

    for (int i = 0; i < board.GetLength(0); i++) 
    { 
     for (int p = 0; p < board.GetLength(1); p++) 
     { 

      if (visibilityArray[i, p] == "2") 
      { 
       count--; 
      } 

     } 
    } 
    return count; 
} 
    static void PrintMinesLeft(string[,] board, string[,] visibilityArray) 
{ 

    Console.SetCursorPosition(11, 0); 
    Console.WriteLine(CountMinesLeft(board, visibilityArray, 0)); 
} 

Это часть игры «Сапер».Метод возвращает два значения (друг на друга)

В этом методе я должен сделать минный счетчик. Если трудность равна 1 (81), 2 (256), 3 (480), счет мины должен быть 10, 40, 99. Проблема здесь в том, что она возвращает два значения (10 и count--, 40 и count - , 99 и count--), и мне нужен только вычитаемый из цикла.

Редактировать: по нескольким значениям я имею в виду, что на выходе есть, например, 10, а сверху 10 вычитается. Вот картина http://s22.postimg.org/3vp1ujo71/8shit.png

+0

Ваш метод возвращает одно значение 'int', а не два. Сначала вы устанавливаете значение счетчика, затем уменьшаете значение в несколько раз, а затем возвращаете окончательный результат. Неясно, что вы подразумеваете под «возвращает два значения». –

+0

Ну на выходе есть счет, и на том же месте поверх него есть уменьшающийся счет. –

ответ

1

Вы должны попробовать реф или из модификаторов:

static int CountMinesLeft(string[,] board, string[,] visibilityArray, ref int anotherCount) 
{ 
    if (visibilityArray.Length == 81) 
    { 
     anotherCount = 10; 
    } 
    else if (visibilityArray.Length == 256) 
    { 
     anotherCount = 40; 
    } 
    else if (visibilityArray.Length == 480) 
    { 
     anotherCount = 99; 
    } 

    int count = anotherCount; 
    for (int i = 0; i < board.GetLength(0); i++) 
    { 
     for (int p = 0; p < board.GetLength(1); p++) 
     { 

      if (visibilityArray[i, p] == "2") 
      { 
       count--; 
      } 
     } 
    } 
    return count; 

}

Для вызова метода:

int anotherCount = 0; 
int count = CountMinesLeft(board, visibilityArray, ref anotherCount); 

Итак, после того, как у вас есть "количество" и " anotherCount "

+0

Тот же материал. Разве это не просто использование другого int? –

+0

«anotherCount» представляет счетчик перед циклом, «count» представляет собой счет после вычитания. После вызова метода вы получаете две переменные. Это то, что вам нужно? –

0

Если вы пытаетесь вернуть несколько значений из метода meth Вы бы могли использовать Tuple

Также взгляните на это question.

+0

Нет, я пытаюсь вернуть его, но в моем случае он возвращает значение 'count' перед циклом и значение' count' после его вычитания. И он возвращает их один поверх другого. –

+0

@NikoTsonev вам нужно работать над заданием четкого вопроса, потому что то, что вы говорите, не имеет смысла, поэтому вам очень сложно помочь, это возвращает только одно значение, int, период, нет, если нет, но ничего другого, если вы не понимайте, что ВЫ НЕ понимаете код, пожалуйста, сообщите нам, что вы видите, и что вы хотели бы видеть, а не пытаться составить технические термины, которых не существует. Например, возвращаемые значения «один поверх другого» не имеет никакого смысла, старайтесь быть предельно ясным, и вы получите хороший ответ. –

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