Почему программа не позволяет ввести размеры матрицы?

Коллеги, я работаю над основным каркасом для будущего приложения, которое будет выполнять различные операции с массивами (одномерными и многомерными). <br/> В текущей версии программы после ввода имени и первого значения не появляется возможность ввести размеры матрицы. Можете подсказать, в чем может быть проблема? Буду признателен за помощь в решении этой задачи. <br/> <br/> <pre><code class="java">/*
Предложить пользователю ввести симметричную матрицу (т.е. 2х2, 3х3, 6х6).
Несимметричные (т.е. 3х6, 6х2 и т.п.) - исключить. Найти сумму элементов матрицы.
Найти минимальный и максимальный элемент матрицы. Попытаться использовать методы для
решения задачи (по памяти и изученным основам программирования ранее).
 */

import java.util.Random;
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);
        System.out.println();
        System.out.println(name + ", введите размеры матрицы: ");
        int n = 0;
        int m = 0;
        while(n != m){
            scanner.nextLine();
            System.out.println("Введите кол-во столбцов: ");
            if(scanner.hasNextInt()){
                n = scanner.nextInt();
                scanner.nextLine();
                continue;
            }
            else
            {
                System.out.println("Введите корректное число!");
            }
            scanner.nextLine();
            System.out.println("Введите кол-во строк: ");
            if(scanner.hasNextInt()){
                m = scanner.nextInt();
  • 2 марта 2025 г. 15:54
Ответы на вопрос 2
Ваша программа не позволяет ввести размеры матрицы, потому что логика проверки на ввод размеров (строки и столбцы) реализована неправильно. Давайте разберем ваш код и исправим его.

Сначала выделим несколько важных моментов:

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()` для сброса буфера ввода.

Теперь программа будет корректно запрашивать размер матрицы и принимать только положительные целые числа.
int n = 0;
int m = 0;
while (n != m) { // n всегда равно m
        ...
Похожие вопросы