2014-12-21 3 views
0
public class Environment { 
    //variables 
    RoundingStage[][] land; 
    int horizontalStreets; 
    int verticalStreets; 

    public Environment(RoundingStage[][] grid) { 
     this.horizontalStreets = grid.length; 
     this.verticalStreets = grid[0].length; 
     land = new RoundingStage[horizontalStreets][verticalStreets]; 

     for (int i = 0 ; i <= horizontalStreets ; i++) 
      for (int j = 0 ; j <= verticalStreets ; j++) 
       land[i][j] = grid[i][j]; 
    } 
    public Environment(Environment env) { 
     this.horizontalStreets = env.horizontalStreets; 
     this.verticalStreets = env.verticalStreets; 
     land = new RoundingStage[horizontalStreets][verticalStreets]; 

     for (int i = 0 ; i <= horizontalStreets ; i++) 
      for (int j=0 ; j <= verticalStreets ; j++) 
       land[i][j] = env.land[i][j]; 
    } 

Может кто-нибудь сказать мне, почему я получаю ArrayOutOfBound, когда я использую эту функцию, я пробовал все комбинации +1, -1, мне нужна помощь, пожалуйста: DArrayIndexOutOfBounds в конструкторе класса

public RoundingStage valueInPosition(int rHor, int rVer) { 
    return land[rHor-1][rVer-1];  
    } 
+0

Извините, я не понял. Не могли бы вы лучше объяснить? –

+0

От 0 до n есть n + 1 элементов, поэтому вы должны зацикливаться от 0 до n - 1. Чтобы быть ясным, замените все ваши '<=' на '<' в ваших условиях цикла – Dici

+0

Im все еще получаю OutOfBounds в строке valueInPosition , Его за пределами: -1 –

ответ

1

На самом деле вы должны получить это исключенное из исключения исключение в этих конструкторах. Эти вложенные петли с использованием i и j в качестве итераторов должны быть циклическими до i < horizontalStreets и j <verticalStreets, а не <=, как и в настоящее время. Индексы массивов Java основаны на 0.

+0

Я все еще получаю OutOfBounds в строке valueInPosition. Его за пределами: -1 –

+0

@SirHadez Можете ли вы проверить, что аргументы, предоставляемые методу 'valueInPosition', находятся в правильном диапазоне? – rchang

+0

@SirHadez Способ, которым вы реализовали этот метод, выглядит так: аргументы rHor и rVer в valueInPosition (int rHor, int rVer) не нулевые индексируются. Очевидно, что если вы передадите 0 как любое из значений, тогда вы будете называть землю [-1] [anyVal] или land [anyVal] [- 1], и он выкинет это исключение –

0

Я не совсем понимаю ваш вопрос, но я собираюсь предположить, что вы имеете в виду: «Почему вызов конструктора приводит к тому, что исключение ArrayOutOfBound получает бросок?» Если это не то, что вы имели в виду, дайте мне знать.

Мое предположение для исключения состоит в том, что условие завершения для цикла for равно i < = horizontalStreets, когда оно должно быть i < horizontalStreets, а также для вертикального.

потому что, поскольку индексы массива начинаются с нуля, попытка обращения к массиву [array.length()] попытается получить запись, которая является одной после конца массива, что приводит к исключению.

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