Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
Выходит ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0. Не могу поянть, какой элемент в массиве отсутствует, подскажите пожалуйста.
package pr;
import java.util.Scanner;
public class pr12 {
public static void main(String[] args) {
double[][] x;
double [] y = new double[0];
int counter = 0;
int N,M;
Scanner inp = new Scanner(System.in);
System.out.print("N = ");
N = inp.nextInt();
System.out.print("M = ");
M = inp.nextInt();
x = new double[N][M]; // N-число строк M-число столбцов
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
System.out.print("x(" + i + "," + j + ")=");
x[i][j] = inp.nextDouble();
}
}
inp.close();
//вывод матрицы в виде таблицы
for (int i = 0; i < N; i++) {
for (int j = 0; j < x[i].length; j++) {
System.out.printf("%6.2f", x[i][j]);
}
System.out.println();
}
//задание
double [] result = new double [x.length % 2 == 0 ? x.length/2 : x.length/2+1];
for (int i = 0; i < x.length; i = i + 2) { //четные строки
boolean isum = false;
double increase = 1;
for (int j = 0; j < x[i].length; j++) {
if ((x[i][j] % 1 == 0)) {
isum = true;
increase *= x[i][j];
y[counter] = increase;
counter++;
}
}
if (!isum)
increase = 0;
}
//выводим новый массив
if(counter == 0)
System.out.println("В матрице в четных строках только дробные числа");
else
for (int i = 0; i < counter-1; i++) {
System.out.printf("Массив: x(%d) = %1.2f\n", i, y[i]);
}
}
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
А если попробовать разбивать на методы и использовать коллекцию вместо массива, дабы не играться с его размером, то все становится проще и рабоает без танцев с бубном))
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class pr12 {
public static void main(String[] args) {
//double[][] x = {{0.1, 0.2}, {3, 4}, {5, 6}};
Scanner inp = new Scanner(System.in);
System.out.print("N = ");
int N = inp.nextInt();
System.out.print("M = ");
int M = inp.nextInt();
double[][] x = new double[N][M]; // N-число строк M-число столбцов
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
System.out.print("x(" + i + "," + j + ")=");
x[i][j] = inp.nextDouble();
}
}
inp.close();
printAray(x);
Double[] result = convert(x);
//выводим новый массив
if (result.length == 0) System.out.println("В матрице в четных строках только дробные числа");
for (int i = 0; i < result.length; i++) System.out.printf("Массив: x(%d) = %1.2f\n", i, result[i]);
}
//вывод матрицы в виде таблицы
private static void printAray(double[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.printf("%6.2f", arr[i][j]);
}
System.out.println();
}
}
private static Double[] convert(double[][] arr) {
final List<Double> result = new ArrayList<>();
for (int i = 0; i < arr.length; i += 2) { //четные строки
boolean isum = false;
double increase = 1;
for (int j = 0; j < arr[i].length; j++) {
if ((arr[i][j] % 1 == 0)) {
isum = true;
increase *= arr[i][j];
}
}
if (isum) result.add(increase);
}
return result.toArray(new Double[result.size()]);
}
}
Аналогично, но без методов (так лучше не делать, но для понимания прикреплю):
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class pr12 {
public static void main(String[] args) {
//double[][] x = {{0.1, 0.2}, {3, 4}, {5, 6}};
Scanner inp = new Scanner(System.in);
System.out.print("N = ");
int N = inp.nextInt();
System.out.print("M = ");
int M = inp.nextInt();
double[][] arr = new double[N][M]; // N-число строк M-число столбцов
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
System.out.print("x(" + i + "," + j + ")=");
arr[i][j] = inp.nextDouble();
}
}
inp.close();
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.printf("%6.2f", arr[i][j]);
}
System.out.println();
}
final List<Double> results = new ArrayList<>();
for (int i = 0; i < arr.length; i += 2) { //четные строки
boolean isum = false;
double increase = 1;
for (int j = 0; j < arr[i].length; j++) {
if ((arr[i][j] % 1 == 0)) {
isum = true;
increase *= arr[i][j];
}
}
if (isum) results.add(increase);
}
Double[] result = results.toArray(new Double[results.size()]);
//выводим новый массив
if (result.length == 0) System.out.println("В матрице в четных строках только дробные числа");
for (int i = 0; i < result.length; i++) System.out.printf("Массив: x(%d) = %1.2f\n", i, result[i]);
}
}