выводятся одни нули, результат сверху

313
01 сентября 2017, 21:47
x = 0.0     y = 0.0
x = 0.0     y = 0.0
x = 0.0     y = 0.0
x = 0.0     y = 0.0
x = 0.0     y = 0.0
x = 0.0     y = 0.0
x = 0.0     y = 0.0

Реализовать функциональность абстрактного класса AbstractArrayOfPoints, приведенного в примере, через использование двумерного массива вещественных чисел. Каждая строка массива должна соответствовать точке.

package r.t.y;
public class Point {
private double x, y;
public Point(double x, double y) {
    this.x = x;
    this.y = y;
}
public double getX() {
    return x;
}
public double getY() {
    return y;
}
public void setPoint(double x, double y) {
    this.x = x;
    this.y = y;
}
}
 package r.t.y;
 public abstract class AbstractArrayOfPoints {
public abstract void setPoint(int i, int j, double x, double y);
public abstract double getX(int i, int j);

public abstract double getY(int i, int j);

public abstract int count();

public abstract void addPoint(double x, double y);

public abstract void removeLast();

public void sortByX() {
    boolean mustSort;
    do {
        mustSort = false;
        for (int i = 0; i < count() - 1; i++) {
            for (int j = 0; j < count() - 1; j++) {
                if (getX(i, j) > getX(i + 1, j + 1)) {
                    double x = getX(i, j);
                    double y = getY(i, j);
                    setPoint(i, j, getX(i + 1, j + 1), getY(i + 1, j + 1));
                    setPoint(i + 1, j + 1, x, y);
                    mustSort = true;
                }
            }
        }
    }
    while (mustSort);
   }

   public String toString() {
    String s = "";
    for (int i = 0; i < count(); i++) {
        for (int j = 0; j < count(); j++) {
            s += "x = " + getX(i, j) + " \ty = " + getY(i, j) + "\n";
        }
    }
    return s + "\n";
  }
     public void test() {
    addPoint(22, 45);
    addPoint(4, 11);
    addPoint(30, 5.5);
    addPoint(-2, 48);
    //sortByX();
    System.out.println(this);
}
}
 package r.t.y;
import java.util.Arrays;
public class ArrayWithTwoArrays extends AbstractArrayOfPoints {
private  double [][]axy = new double[4][4];
protected final static int cX = 0;
protected final static int cY = 0;
 // protected final static int DIRECTION = 0;
 @Override
  public void setPoint(int i, int j, double x, double y) {
    axy[i][cX] = x;
    axy[i][cY] = y;
}
@Override
public double getX(int i, int j) {
    return axy[i][cX];
}
@Override
public double getY(int i, int j) {
    return axy[i][cX];
}
@Override
public int count() {
    return axy.length; // Можна ay.length, вони однакові
}
   @Override
   public void addPoint(double x, double y) {
    double[][] axy1 = new double[axy.length + 1][axy.length+1];
    System.arraycopy(axy, 0, axy1, 0, axy.length);
    axy1[axy.length][axy.length] = getX(0,0);
    axy1[axy.length][axy.length] = getY(0,0);
    axy = axy1;
   // double[] ay1 = new double[ay.length + 1];
   // System.(ay, 0, ay1, 0, ay.length);
    //ay1[ay.length] = y;
    //ay = ay1;
 }
  @Override
  public void removeLast() {
    if (count() == 0) {
        return;
    }
    double[][] axy1 = new double[axy.length - 1][axy.length - 1];
    System.arraycopy(axy, 0, axy1, 0, axy1.length);
    axy = axy1;
   // double[] ay1 = new double[ay.length - 1];
    //System.arraycopy(ay, 0, ay1, 0, ay1.length);
    //ay = ay1;
}
public static void main(String[] args) {
    new ArrayWithTwoArrays().test();
}
}
Answer 1

поставьте брэйкпойнт в r.t.y.ArrayWithTwoArrays.getX на 17 строке (см стэктрейс) и запустите дебаг. думаю вы увидете, что массив axy пустой, а поэтому попытка получить его первый (т.е. 0-ой) элемент заканчивается эксепшном.

Answer 2
private double [][] axy = new double[][]{};

Вот этой строчкой Вы создаёте массив с 0 элементов. Естественно, при попытке обратиться к элементам этого массива в методе setPoint Вы получаете ArrayIndexOutOfBoundsException (выход индекса за пределы границ массива). Короче говоря, создавайте массив нужной размерности прежде чем в него что-то помещать, в Java массивы сами собой не растягиваются =)

READ ALSO
Теряются относительные пути

Теряются относительные пути

Есть учебный JEE MVC проектОдин контроллер- сервлет

304
AdMob Реклама не работает корректно

AdMob Реклама не работает корректно

LogcatEvent LogДобавляя тестовый ad unit ID(с офицсайта AdMob for Androids)(ca-app-pub-3940256099942544/6300978111), всё работает отлично, и тип эта реклама поздравляет меня, что...

383
Regex для разбиения выражения на лексемы

Regex для разбиения выражения на лексемы

Делаю калькулятор на Java 8Надо написать регулярное выражение для разбиение строки на лексемы

297
Как запустить Node.js файл, используя J2V8

Как запустить Node.js файл, используя J2V8

Использую библиотеку J2V8Мне необходимо запустить файл node

301