Почему эту строку компилятор воспринимает как ошибку?

mas2[k] = mas[i][j]; В этой части кода компилятор показывает ошибку. Почему? Значение из массива массивов записывается в массив! Массивы заранее и индексы объявлены

package by.htp.java10.main;

import java.util.*;

public class Mas10 {

    public static void main(String[] args) {
        int i = 0;
        int j = 0;
        int k = 0;
        int x = 1;

        Scanner sc = new Scanner(System.in);

        System.out.println("Введите размерность матрицы: ");
        while (!sc.hasNextInt()) {
            sc.next();
        }
        i = sc.nextInt();
        System.out.println("Новая матрица равна: ");
        if (i % 2 == 0) {

            int[][] mas = new int[i][i];
            k = mas.length;
            int[] mas2 = new int[k];

            init(mas);// инициализация массива

            for (i = 0; i < mas.length; i++) {
                for (j = 0; j < mas[i].length; j++) {

                    System.out.printf("%5d ", mas[i][j]);
                    if (i == j && mas[i][j] > 0) {
                        mas2[k] = mas[i][j];

                        k++;
                    }
                }
                System.out.println();

            }
            System.out.print("Положительные элеиенты равны " + mas2[k]);
        } else {
            System.out.println("Вы ввели нечетное число");
        }

    }

    public static void init(int[][] ar) {
        Random rand = new Random();
        for (int i = 0; i < ar.length; i++) {
            for (int j = 0; j < ar[i].length; j++) {
                ar[i][j] = rand.nextInt(100) - 50;
            }
            System.out.println();
        }

    }

}

Ответы (2 шт):

Автор решения: Igor

компилятор показывает ошибку

Никогда! Слышите? Никогда не говорите, какую ошибку Вы получаете. Мы обожаем гадать.

    k = 0;
    for (i = 0; i < mas.length; i++) {
      ...
→ Ссылка
Автор решения: Дмитрий

Я бы работал с одномерной матрицей. Это всегда проще. Например, так:

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
import java.util.stream.IntStream;

public class Mas10 {

    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("Введите размерность матрицы: ");
            int arraySize = Integer.valueOf(sc.nextLine());
            
            int[] array = new Random().ints(arraySize * arraySize, -100, 100).toArray();
            System.out.println("Новая матрица равна: ");
            printArray(array, arraySize);

            int[] toArray = IntStream.concat(
                    IntStream.iterate(arraySize - 1, i -> i + arraySize - 1).limit(arraySize).map(i -> array[i]),
                    IntStream.range(0, arraySize).limit(arraySize).map(i -> array[i * arraySize + i]))
                .filter(v -> v > 0).toArray();
            System.out.print("Положительные элеиенты равны " + Arrays.toString(toArray));
        } catch (NumberFormatException e) {
            System.out.println("Вы ввели нечетное число либо некорректное значение (допустимы только цифры)");
        }
    }

    private static void printArray(int[] array, int size) {
        for (int i = 0; i < array.length; i++) {
            if (i%size == 0) System.out.println();
            System.out.printf("%4d", array[i]);
        }
        System.out.println();
    }
    
}

Данный подход более гибкий и простой. К примеру, здесь без труда можно отсортировать результирующий массив или убрать из него повторяющиеся элементы и т.д.

→ Ссылка