2013-05-20 3 views
0

Получил глупый вопрос, с которым я боролся.Поиск в многомерном массиве вложенных циклов

Im пытается пройти через многомерный массив C#, используя вложенные для циклов, но я не могу получить результат, который я хочу, и я думаю, что это просто глупая проблема с моим кодом.

string search = txtString.Text; 

     int iLoop; 
     int jloop; 
     int iResult = -1; 

     for (iLoop = 0; iLoop < sounds.GetLength(0) ; iLoop++) 
     { 
      for (jloop = 0; jloop < sounds.GetLength(1) ; jloop++) 
      { 

       string result; 
       result = sounds[iLoop,jloop]; 

       if (result == search) 
       { 
        iResult = iloop; 
       } 
      } 
     } 

      if (iResult == -1) 
      { 
       MessageBox.Show("Result not found"); 
      } 
      else 
      { 
       MessageBox.Show("Result found at position " + iResult);      
      }    
    } 

Он ищет массив и возвращает положительный результат, если ответ будет найден, но позиция результата всегда «Результат найден в позиции 1».

Что я сделал не так?

+2

Может быть, потому что результат всегда в первой строке? –

+0

Как произносится «звуки» и что ему назначено? –

+0

Кстати, в вашем коде понятие 'position' соответствует числу' row', но не пара 'row, column'. Это было сделано намеренно? –

ответ

0

Вы сохраняете только одно измерение (iResult). Он всегда может быть 1, но второй размер (jresult) может варьироваться.

И просто напоминание о будущих проектах на разных языках. Не пытайтесь использовать if (result == search) для строк. Используйте Equal или Compare methods.

+2

В C#, '==' отлично подходит для примитивов и строк. – pascalhein

+0

Да, в C# ... но если он переключится, например, на Java или на другой язык, это может создать массу проблем для начинающих. Лучше использовать одну и ту же нотацию на всех языках, и вы можете быть уверены, что у вас это нормально :) –

0

Есть два индекса для поиска: jloop и iLoop, вероятно, вы получите различные значения jloop в 2D массив

0

Также проверьте имя параметра, который вы используете, иногда называете его iLoop, другие iloop. Будьте последовательны! :)

Я думаю, что ответ всегда в строке 1, вы просто оцениваете значение i, печатаете также значение jjLoop.

0

Имейте в виду, что этот фрагмент кода продолжит поиск даже после того, как он нашел совпадение. Так что на самом деле то, что вы находите, это последнее позиция совпадающего текста.

В качестве альтернативы, возможно, вместо того, чтобы сообщать только о соответствии iLoop, вы можете сообщить оба соответствия и jLoop. Или вы можете сообщить об одном индексе как iLoop * sounds.GetLength(0) + jLoop