2015-04-18 3 views
-1

Мне нужно пройти через массив 2d назад для небольшого проекта карты, который я делаю. Я попытался сделать это исходя из того, что я читал в Интернете, но мой 2d-массив отличается. Как я могу пройти через это назад?Петля через массив 2d назад

for(int i = 0; i < map.length; i++){ 
    for(int j = 0; j < map[i].length; j++) { 
     switch (nmap[j][i]) { 
      map[i][j] = new Tile(); 
     } 
    } 
} 
+2

По задом наперед вы имеете в виду с 'карты [N] [M]' 'на карту [0] [0]' (где 'N' этого числа строк и' M' этого число столбцов)? –

ответ

-3

Здесь вы идете.

for(int i = map.length-1; i >= 0; i--){ 
    for(int j = map[i].length-1; j >= 0; j--) { 
     switch (nmap[j][i]) { 
      map[i][j] = new Tile() 
     } 
    } 
} 

Вместо того, переходя от 0 до map.length и 0 для отображения [я] .length, эта программа начинается map.length-1 (так что вы никогда не получите индекс из оценки точности) и продолжается до тех пор, пока он не достигнет нуля.

+0

- Потому что это ничего не объясняет. Если у них возникают проблемы с пониманием цикла 'for', я не вижу этой помощи. – Carcigenicate

+0

Если у них возникают проблемы с пониманием цикла for, они не должны переполняться в стеке. –

0

С for(int i = 0; i < length; i++) вы начинаете с начала (0) и идем к концу (length).

Для перехода в другую сторону, как раз обратное: все

for(int i = length - 1; i >= 0; i--)

Мало что отметить:

  • Мы должны сделать length - 1, или мы начнем 1 в конце прошлого
  • Мы используем >= для включения 0
  • Мы декрементируем i в вместо того, чтобы увеличивать его.

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

1

Чтобы перейти в другую сторону, вам нужно запустить индекс с наивысшим значением и уменьшить его для каждой итерации. Как это:

for (int i = map.length - 1; i >= 0; i--) 
    for (int j = map[i].length - 1; j >= 0; j--) { 
     switch (map[i][j]) { 
      map[i][j] = new Title(); 
     } 
    } 

Обратите внимание, что в обоих циклах, мы начинаем с самого высокого индекса, map.length - 1 в первом и карте [я] .length в секунду, и спускаясь по одному для каждого итерации, пока мы не достигнем самого низкого индекса, 0 для обеих петель.

-1

Чтобы вернуться назад, вам нужно прочитать от наивысшего индекса до 0. Самый высокий индекс обычно имеет длину-1, так как индексы начинаются с 0. То же самое происходит для внутреннего j-цикла. Начните с наивысшего индекса карты [i] i.e length -1.

например. Array = [2, 3,4,5,6] Длина = 5. Инициировать от 4 до 0, если наоборот.

for(int i = map.length-1; i >= 0; i--) { 
     for(int j = map[i].length-1; j >= 0; j--) { 
      //your operation 
     } 
    } 
+1

Ум, чтобы объяснить это немного? –

+0

обновлено с объяснением. в случае, если вы являетесь downvoter, а также для помощи OP. Извини за это. –

+0

Я не спустил вниз, но спасибо за объяснение. Не обескураживайте. Ответы на качество получают upvotes. –

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