Помогите с данной ошибкой пожалуйста.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at lab.DoubleArray.addPoint(DoubleArray.java:38)
at lab.AbstractArrayOfPoints.test(AbstractArrayOfPoints.java:45)
at lab.DoubleArray.main(DoubleArray.java:55)
C:\Users\apolo\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
СБОРКА ЗАВЕРШЕНА СО СБОЕМ (общее время: 0 секунд)
AbstractArrayOfPoints.class
public abstract class AbstractArrayOfPoints {
public abstract void setPoint(int i, double x, double y);
public abstract double getX(int i);
public abstract double getY(int i);
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++) {
if (getX(i) > getX(i + 1)) {
double x = getX(i);
double y = getY(i);
setPoint(i, getX(i + 1), getY(i + 1));
setPoint(i + 1, x, y);
mustSort = true;
}
}
}
while (mustSort);
}
@Override
public String toString() {
String s = "";
for (int i = 0; i < count(); i++) {
s += "x = " + getX(i) + " \ty = " + getY(i) + "\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);
}
}
DoubleArray.class
public class DoubleArray extends AbstractArrayOfPoints{
private double[][] array = {{ },{ }};
@Override
public void setPoint(int i, double x, double y) {
if(i < count()){
array[i][i] = x;
array[i][i+1] = y;
}
}
@Override
public double getX(int i) {
return array[i][i];
}
@Override
public double getY(int i) {
return array[i][i+1];
}
@Override
public int count() {
return array.length;
}
@Override
public void addPoint(double x, double y) {
double[][] axy = new double[array.length + 1][array.length];
System.arraycopy(array, 0, axy, 0, array.length);
for (int i = 0; i < axy.length; i++){
for(int j = 0; j < axy[i].length; j++){
axy[i][j] = x;
axy[i][j+1] = y;
}
}
array = axy;
}
@Override
public void removeLast() {
if (count() == 0) {
return;
}
double[][] axy = new double[array.length - 1][array.length - 2];
System.arraycopy(array, 0, axy, 0, axy.length);
array = axy;
}
public static void main(String[] args) {
new DoubleArray().test();
}
}
UPD.
run:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at lab.DoubleArray.getX(DoubleArray.java:17)
at lab.AbstractArrayOfPoints.sortByX(AbstractArrayOfPoints.java:23)
at lab.AbstractArrayOfPoints.test(AbstractArrayOfPoints.java:49)
at lab.DoubleArray.main(DoubleArray.java:54)
C:\Users\apolo\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
СБОРКА ЗАВЕРШЕНА СО СБОЕМ (общее время: 0 секунд)
AbstractArrayOfPoints.class
package lab;
public abstract class AbstractArrayOfPoints {
public abstract void setPoint(int i, double x, double y);
public abstract double getX(int i);
public abstract double getY(int i);
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++) {
if (getX(i) > getX(i + 1)) {
double x = getX(i);
double y = getY(i);
setPoint(i, getX(i + 1), getY(i + 1));
setPoint(i + 1, x, y);
mustSort = true;
}
}
}
while (mustSort);
}
@Override
public String toString() {
String s = "";
for (int i = 0; i < count(); i++) {
s += "x = " + getX(i) + " \ty = " + getY(i) + "\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);
}
}
DoubleArray.class
package lab;
public class DoubleArray extends AbstractArrayOfPoints {
private double[][] array = {{}, {}};
@Override
public void setPoint(int i, double x, double y) {
if (i < count()) {
array[i][0] = x;
array[i][1] = y;
}
}
@Override
public double getX(int i) {
return array[i][0];
}
@Override
public double getY(int i) {
return array[i][1];
}
@Override
public int count() {
return array.length;
}
@Override
public void addPoint(double x, double y) {
final int len = array.length;
double[][] axy = new double[len + 1][len];
System.arraycopy(array, 0, axy, 0, len);
axy[len][0] = x;
axy[len][1] = y;
array = axy;
}
@Override
public void removeLast() {
if (count() == 0) {
return;
}
double[][] axy = new double[array.length - 1][array.length];
System.arraycopy(array, 0, axy, 0, axy.length);
array = axy;
}
public static void main(String[] args) {
new DoubleArray().test();
}
}
Думаю, реализация addPoint
должна была быть такой:
@Override
public void addPoint(double x, double y) {
final int len = array.length;
double[][] axy = new double[len + 1][len];
System.arraycopy(array, 0, axy, 0, len);
axy[len][0] = x;
axy[len][1] = y;
array = axy;
}
UPD.
Заметил, что похожая ошибка работы с x и y есть и в других метода:
@Override
public double getX(int i) {
return array[i][0];
}
@Override
public double getY(int i) {
return array[i][1];
}
PS. а почему бы вместо массивов не использовать ArrayList
?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Cделать расстояние между группамми элементов по типу android:dividerHeight в обычном listview?
помогите, пожалуйстакак отправить данные через ble? какие методы для этого требуются? нашла я только как подключаться и показывать сервисы...