0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 3
1

Нужна подсказка. Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6

08.03.2016, 16:12. Показов 2335. Ответов 4

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста в чем моя ошибка. Данная ошибка возникает в 79, 80 и 85 строках.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
 * Created by bunta on 07.03.16.
 */
import java.util.*;
import java.lang.*;
 
public class Matrix {
    private int matrix[][];
    private int set_random;
    private int number_arr[];
    private int result_arr[][];
    private int result_sum;
    private Generation_permutation perms;
    public Matrix(int length, int number) { //Конструктор класса.
        set_random = number;
        number_arr = new int[length];
        fill_matrix(length);
        for (int i=0; i<length; i++) {
            number_arr[i] = i+1;
        }
    }
    private void fill_matrix (int length) { //Инициализируем квадратную матрицу и забиваем случайными числами от 0 до 9
        Random r = new Random(System.currentTimeMillis());
        matrix = new int[length][length];
        for (int i=0; i<length; i++) {
            for (int j=0; j<length; j++) {
                matrix[i][j] = r.nextInt(set_random);
            }
        }
    }
    void show_matrix() { //Отобразить полученную матрицу
        int length = matrix.length;
        int temp = search_min_not_found();
        perms = new Generation_permutation(number_arr);
        for (int i=0; i<length; i++) {
            System.out.print("|");
            for (int j=0; j<length; j++) {
                System.out.print(matrix[i][j] + "|");
            }
            System.out.print("\n");
        }
        if (temp == (set_random-1)) {
            System.out.println("Все натуральные числа из заданного диапазона используются");
        } else {
            System.out.println("Минимальное число: " + temp+1);
        }
        search_sum_diagonal();
        if (result_arr[0][0]>=0) {
            System.out.println("Сумма: " + result_sum);
            for (int i=0; i<result_arr.length; i++){
                for (int j=0; j<result_arr.length; j++) {
                    System.out.print(result_arr[i][j]);
                }
                System.out.print("\n");
            }
        } else {
            System.out.print("Вариантов не найдено.");
        }
    }
   private int search_min_not_found() { //Поиск минимального натурального числа из заданного, которое НЕ встречается
        int result = 0;
        int lenght = matrix.length;
        for (int i=0; i<lenght; i++) {
            for (int j = 0; j < lenght; j++) {
                if (result <= matrix[i][j]) {
                    result = matrix[i][j];
                }
            }
        }
        return result;
    }
    private void search_sum_diagonal () {
        int temp_perms_arr[][] = perms.getPerms();
        int sum1=0, sum2=0;
        int temp_matrix_arr[][] = matrix;
        for (int i=0; i<Generation_permutation.fact(matrix.length); i++) {
            int temp_arr[] = Arrays.copyOf(temp_perms_arr[i],matrix.length);
            for (int j=0, c=matrix.length; j<matrix.length; j++, c--) {
                sum1 += temp_matrix_arr[temp_arr[j]][temp_arr[j]];
                //sum2 += matrix[temp_arr[j]][temp_arr[c]];
            }
            if (sum1 == sum2) {
                result_arr = new int [matrix.length][matrix.length];
                for (int a=0; i<matrix.length; a++) {
                    //result_arr[a] = Arrays.copyOf(matrix[temp_arr[a]],matrix.length);
                }
                result_sum = sum1;
                break;
            }
        }
    }
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at Matrix.search_sum_diagonal(Matrix.java:80)
at Matrix.show_matrix(Matrix.java:47)
at Main.main(Main.java:5)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2016, 16:12
Ответы с готовыми решениями:

Ошибка "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3"
Доброго времени суток. Я решил написать программу чисто для себя, но мне постоянно выдает ошибку на...

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
import java.util.Scanner; public class Filter { public static void main (String args) {...

Ошибка: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
Код реализации стека: package Class; class Stack { private int top; private int...

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
Здравствуйте у меня такая проблема: Exception in thread &quot;main&quot;...

4
2882 / 2294 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
08.03.2016, 16:19 2
78 строка
Java
1
for (int j=0, c=matrix.length; j<matrix.length; j++, c--) {
что должно значить c=matrix.length; ?
0
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 3
08.03.2016, 16:34  [ТС] 3
Возвращает размер массива

Добавлено через 10 минут
Это значение используется в следующей строке, которая закоментированна.

Добавлено через 3 минуты
Не тот вариант.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
 * Created by bunta on 07.03.16.
 */
import java.util.*;
import java.lang.*;
 
public class Matrix {
    private int matrix[][];
    private int set_random;
    private int number_arr[];
    private int result_arr[][];
    private int result_sum;
    private Generation_permutation perms;
    public Matrix(int length, int number) { //Конструктор класса.
        set_random = number;
        number_arr = new int[length];
        fill_matrix(length);
        for (int i=0; i<length; i++) {
            number_arr[i] = i+1;
        }
    }
    private void fill_matrix (int length) { //Инициализируем квадратную матрицу и забиваем случайными числами от 0 до 9
        Random r = new Random(System.currentTimeMillis());
        matrix = new int[length][length];
        for (int i=0; i<length; i++) {
            for (int j=0; j<length; j++) {
                matrix[i][j] = r.nextInt(set_random);
            }
        }
    }
    void show_matrix() { //Отобразить полученную матрицу
        int length = matrix.length;
        int temp = search_min_not_found();
        perms = new Generation_permutation(number_arr);
        for (int i=0; i<length; i++) {
            System.out.print("|");
            for (int j=0; j<length; j++) {
                System.out.print(matrix[i][j] + "|");
            }
            System.out.print("\n");
        }
        if (temp == (set_random-1)) {
            System.out.println("Все натуральные числа из заданного диапазона используются");
        } else {
            System.out.println("Минимальное число: " + temp+1);
        }
        search_sum_diagonal();
        if (result_arr[0][0]>=0) {
            System.out.println("Сумма: " + result_sum);
            for (int i=0; i<result_arr.length; i++){
                for (int j=0; j<result_arr.length; j++) {
                    System.out.print(result_arr[i][j]);
                }
                System.out.print("\n");
            }
        } else {
            System.out.print("Вариантов не найдено.");
        }
    }
   private int search_min_not_found() { //Поиск минимального натурального числа из заданного, которое НЕ встречается
        int result = 0;
        int lenght = matrix.length;
        for (int i=0; i<lenght; i++) {
            for (int j = 0; j < lenght; j++) {
                if (result <= matrix[i][j]) {
                    result = matrix[i][j];
                }
            }
        }
        return result;
    }
    private void search_sum_diagonal () {
        int temp_perms_arr[][] = perms.getPerms();
        int sum1=0, sum2=0;
        //int temp_matrix_arr[][] = matrix;
        for (int i=0; i<Generation_permutation.fact(matrix.length); i++) {
            int temp_arr[] = Arrays.copyOf(temp_perms_arr[i],matrix.length);
            for (int j=0, c=matrix.length; j<matrix.length; j++, c--) {
                sum1 += matrix[temp_arr[j]][temp_arr[j]];
                sum2 += matrix[temp_arr[j]][temp_arr[c]];
            }
            if (sum1 == sum2) {
                result_arr = new int [matrix.length][matrix.length];
                for (int a=0; i<matrix.length; a++) {
                    result_arr[a] = Arrays.copyOf(matrix[temp_arr[a]],matrix.length);
                }
                result_sum = sum1;
                break;
            }
        }
    }
}

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at Matrix.search_sum_diagonal(Matrix.java:80)
at Matrix.show_matrix(Matrix.java:47)
at Main.main(Main.java:5)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
0
2882 / 2294 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
08.03.2016, 16:36 4
я в код не вникал, пытался понять что происходит )

sum1 += temp_matrix_arr[temp_arr[j]][temp_arr[j]];
а тут точно j j а не i j ?
0
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 3
08.03.2016, 19:17  [ТС] 5
Абсолютно точно. По i идет перебор по массиву с перестановками. По j перебор по массиву значительно меньше.

Добавлено через 2 часа 17 минут
Разобрался. В какой-то момент индекс массива становился больше количества элементов массива. Тема закрыта.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2016, 19:17
Помогаю со студенческими работами здесь

Ошибка: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
Задача такая: из файла эксель считываются значения в матрицу, нужно подсчитать среднее...

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
Посмотрите пожалуйста, что тут не так. Битый час сижу голову ломаю, никак додуматься не могу....

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
Добрый день! Дабы разобраться с объектами решил написать простую программу для вывода чисел...

Ошибка: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100
Линейный массив заполняется случайными вещественными числами из диапазона package com.company; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru