Ваша программа не позволяет ввести размеры матрицы, потому что логика проверки на ввод размеров (строки и столбцы) реализована неправильно. Давайте разберем ваш код и исправим его.
Сначала выделим несколько важных моментов:
1. **Проверка на симметричность**: Из условия задачи следовало бы вводить только одно значение, которое будет использоваться и для количества строк, и для количества столбцов, поскольку матрица должна быть симметричной (n x n).
2. **Циклы и проверки ввода**: Ваш текущий код пытается получать размеры матрицы в цикле, но не совсем правильно обрабатывает ввод. Исправим эту часть.
Вот пример исправленного кода:
```java
import java.util.Scanner;
public class Multiarrays_Task_Manager {
private static Scanner scanner = new Scanner(System.in);
private static String name;
private static String sex;
public static void main(String[] args) {
name = username();
sex = sex();
messageRules(name, sex);
int size = getMatrixSize();
// Дальнейшая логика работы с матрицей.
}
private static int getMatrixSize() {
int size = 0;
while (true) {
System.out.println(name + ", введите размер матрицы (n x n): ");
if (scanner.hasNextInt()) {
size = scanner.nextInt();
scanner.nextLine(); // сброс буфера
if (size > 0) {
break; // выходим из цикла, если размер корректный
} else {
System.out.println("Введите положительное число!");
}
} else {
System.out.println("Введите корректное число!");
scanner.nextLine(); // сброс буфера
}
}
return size;
}
private static String username() {
// Здесь ваша логика для получения имени пользователя
return "Пользователь"; // временная замена
}
private static String sex() {
// Здесь ваша логика для получения пола пользователя
return "мужской"; // временная замена
}
private static void messageRules(String name, String sex) {
// Логика для вывода сообщений
System.out.println("Добро пожаловать, " + name + "!");
}
}
```
### Изменения, которые были внесены:
1. **Метод `getMatrixSize`**: Создан новый метод, который отвечает исключительно за получение корректного размера матрицы от пользователя. Он будет запрашивать у пользователя одно число, которое будет размером n (для матрицы n x n).
2. **Проверка ввода**: Вместо двух разных переменных (`n` и `m`) теперь только одно значение - `size`. Программа будет запрашивать размер матрицы до тех пор, пока не будет введено правильное значение.
3. **Сброс буфера**: Используется `scanner.nextLine()` после `scanner.nextInt()` для сброса буфера ввода.
Теперь программа будет корректно запрашивать размер матрицы и принимать только положительные целые числа.