2014-09-20 5 views
-1

Я делаю программу, чтобы получить середину линии. Однако я столкнулся с проблемой.Массив внутри массива

Что нужно, чтобы иметь возможность иметь столько очков, сколько я хочу, и размеры. Однако я понятия не имею, как это сделать.

Итак, позвольте мне дать вам представление о том, что я хочу делать.

points[point][x]=1; points[point][y]=2; points[point][z]=3; 

Посмотрите, что я получаю? Это то, что я в настоящее время

public float[][] points={{}}; 

И когда я хочу написать ему

 for(int i=0; i<parts.length;i++){ 
      points[currentPoint][i]=Float.valueOf(parts[i]); 
     } 

java.lang.ArrayIndexOutOfBoundsException: 0

Так как я могу это сделать?

+2

Возможный дубликат [Инициализация многомерного массива в Java] (http://stackoverflow.com/questions/1067073/initialising-a-multidimensional-array-in-java) – Foggzie

+0

Оставьте правую сторону в объявлении – ElefantPhace

+0

GuntherFox , Когда я делаю это, я получаю сообщение об ошибке в нижней части сообщения. ElefantPhace, когда я делаю это, я получаю ошибку nullPointerException –

ответ

0

Используйте это, чтобы создать массив 3х3 2-D и инициализировать все значения в 0:

public float points[][] = new float[3][3]; 

И это перебирать массив и набор значений:

for (int j=0; j<3; j++) { 
    for (int i=0; i<3; i++) { 
     points[j][i] = 42; //Or whatever 
    } 
} 
0
public float[][] points={{}}; 

Этот создает пустой двухмерный массив. Следовательно, исключение ArrayIndexOutOfBoundsException. Если вы хотите создать массив для хранения 6 очков и 3 измерения, то вы должны передать его:

public float[][] points = new float[6][3];

Однако я хотел бы пересмотреть свой проект. Если вы хотите пойти более объектно-ориентированным способом, чем вам, вероятно, хотелось бы иметь класс для строки, а также для точки. Например:

class Line { 
    private final Point startPoint; 
    private final Point endPoint; 

    Line(Point startPoint, Point endPoint) { 
     this.startPoint = startPoint; 
     this.endPoint = endPoint; 

     final int startPointDimensions = startPoint.getDimensions().size(); 
     final int endPointDimensions = endPoint.getDimensions().size(); 
     if (startPointDimensions != endPointDimensions) { 
      throw new RuntimeException("Points that form a line must have the same dimension! " + 
        "Start point dimension: " + startPointDimensions + 
        "End point dimension: " + endPointDimensions); 
     } 
    } 

    public Point midpoint() { 
     // your code goes here 
    } 
} 

class Point { 
    private final List<Float> dimensions; 

    Point(List<Float> dimension) { 
     dimensions = dimension; 
    } 

    public List<Float> getDimensions() { 
     return dimensions; 
    } 
} 

Вы можете прочитать больше о списках в oracle's documentation. Я бы предпочел список массивов, если вы не знаете, сколько измерений вы хотите поддержать или хотите поддерживать разные размеры.

+0

Пожалуйста, объясните? Как вы предлагаете мне это сделать? –

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