Почему эту строку компилятор воспринимает как ошибку?
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();
}
}
Данный подход более гибкий и простой. К примеру, здесь без труда можно отсортировать результирующий массив или убрать из него повторяющиеся элементы и т.д.