Неверно осуществляется поиск индекса в двумерном массиве
Есть задание:
Создайте класс с именем Location
для нахождения наибольшего элемента и его позиции в двумерном массиве.
Класс должен содержать public-поля row
, column
и maxValue
, в которых будут храниться наибольший элемент типа double
и его индексы в двумерном массиве со строчками и столбцами типа int
.
Напишите следующий метод, который возвращает позицию наибольшего элемента в двумерном массиве:
public static Location locateLargest(double[][] a)
Возвращаемое значение должно быть типа Location. Напишите клиент этого класса — программу, которая предлагает пользователю ввести двумерный массив и отображает позицию наибольшего элемента в этом массиве. Пример выполнения программы:
Введите количество строчек и столбцов массива: 3 4
Введите массив:
23.5 35 2 10
4.5 3 45 3.5
35 44 5.5 9.6
Наибольший элемент массива, равный 45.0, находится в позиции (1, 2)
Вот код:
import java.util.Scanner;
public class Location {
public int row, column;
public static double maxValue;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Введите кол-во строчек и столбцов массива: ");
int row = input.nextInt();
int column = input.nextInt();
System.out.println("Введите массив: ");
double[][] array = getArray(row, column);
Location l = new Location();
System.out.println("Наибольший элемент массива, равный, " + locateLargest(array) + " находится в позиции " + row + ", " + column);
}
// считаем кол-во строчек и столбцов
public static double[][] getArray(int row, int column) {
Scanner input = new Scanner(System.in);
double[][] a = new double[row][column];
for (row = 0; row < a.length; row++) {
for (column = 0; column < a[row].length; column++) {
a[row][column] = input.nextDouble();
}
}
return a;
}
// наибольший элемент в массиве
public static double locateLargest(double[][] a) {
int rowIndex = 0;
int columnIndex = 0;
double max = a[rowIndex][columnIndex];
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] > max)
max = a[i][j];
rowIndex = i;
columnIndex = j;
}
return max; // что вернуть?
}
}
Почему неверно считается индекс нахождения числа? В чем ошибка в коде?
import java.util.Scanner;
public class Location {
public int row, column;
public double maxValue;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Введите кол-во строчек и столбцов массива: ");
int row = input.nextInt();
int column = input.nextInt();
System.out.println("Введите массив: ");
double[][] array = getArray(row, column);
Location l = locateLargest(getArray(row, column));
System.out.println("Наибольший элемент массива, равный, " + l.maxValue + " находится в позиции " + l.row + ", " + l.column);
}
public Location (int newRow, int newColumn, double newMaxValue) {
row = newRow;
column = newColumn;
maxValue = newMaxValue;
}
// находим наибольший элемент
public static Location locateLargest(double[][] a) {
int rowIndex = 0;
int columnIndex = 0;
double max = a[0][0];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] > max)
max = a[i][j];
rowIndex = i;
columnIndex = j;
}
}
Location l = new Location(rowIndex, columnIndex, max);
return l;
}
// считаем кол-во строчек и столбцов
public static double[][] getArray(int row, int column) {
Scanner input = new Scanner(System.in);
double[][] a = new double[row][column];
for (row = 0; row < a.length; row++) {
for (column = 0; column < a[row].length; column++) {
a[row][column] = input.nextDouble();
}
}
return a;
}
}
Код переписала. НО возникает ошибка при указании в массиве нецелочисленных значений. При указании целочисленных все в порядке:
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:947)
at java.base/java.util.Scanner.next(Scanner.java:1602)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2573)
at Location.getArray(Location.java:48)
at Location.main(Location.java:15)