Возникает исключение java.lang.ArrayIndexOutOfBoundsException: 2

158
12 апреля 2022, 04:00

В eclipse все работает, исключений не кидает

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Part4 {
static int[] maxes;
static public int max1;
static int c = 0;
Part4(int length){
maxes = new int[length];
}
public static int job(int[] ar) {
    int max = ar[0];
    for (int i = 0; i < ar.length; i++) {
        if (max < ar[i]) {
            max = ar[i];
        }
        try {
            Thread.sleep(1);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
    }
    synchronized (maxes) {
        if(c<maxes.length) {
    maxes[c] = max;
    c++;
        }
        max1=max;
    }
    return max;
}
public void getMax() {
     max1=maxes[0];
     job(maxes);
}
public int getMaxNoThread(int [][]arr) {
int max=arr[0][0];
for(int i=0;i<arr.length;i++) {
    for(int j=0;j<arr[i].length;j++) {
        try {
        Thread.sleep(1);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        if (max < arr[i][j]) {
            max = arr[i][j];
        }
    }
}
return max;
}
public static int[][] arrayFromString(){
StringBuilder str=new StringBuilder(Util.readFile("part4.txt"));
String[] srt=str.toString().split(System.lineSeparator());
int[][] arr =new int [srt.length][];
Pattern p=Pattern.compile("(?mU)(\\d+) *");
for(int i=0;i<srt.length;i++) {
Matcher m=p.matcher(srt[i]);
int j=0;
while(m.find()) {
    j++;
}
arr[i]=new int[j];
j=0;
 m=p.matcher(srt[i]);
while(m.find()) {
    arr[i][j]=Integer.parseInt(m.group(1));
    j++;
}
}
return arr;
}
public static void main(String[] args){
    int[][] arr =arrayFromString();
    Part4 t = new Part4(arr.length);
    Thread[] thr = new Thread[arr.length] ;
    long before =System.currentTimeMillis();
    for (int i = 0; i < arr.length; i++) {
        thr[i] = new myThread(arr[i]);
        thr[i].start();
    }
    for (int i = 0; i < arr.length; i++) {
    try {
        thr[i].join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    }
    t.getMax();
long after=System.currentTimeMillis();
System.out.println(max1);
System.out.println(after-before);
before=System.currentTimeMillis();
int max =t.getMaxNoThread(arr);
after=System.currentTimeMillis();
System.out.println(max);
System.out.println(after-before);
}
static class myThread extends Thread {
    int[] ar;
    myThread(int[] ar) {
        this.ar = ar;
    }
    public void run() {
        Part4.job(ar);
        Thread.currentThread().interrupt();
    }
}
}

Вопрос в том как пофиксить , ибо не могу понять что не так

Answer 1

Ошибка означает, что в массиве у вас 2 элемента, а вы запрашиваете третий, которого нет.

READ ALSO
Scanner в каждом классе - рационально ли?

Scanner в каждом классе - рационально ли?

Возник такой вопросИмеется 5 классов + Main

230
Как сделать условие корректным

Как сделать условие корректным

Вопрос: как изменить код, чтобы он корректно работалОсновная проблема в инициализации массива

196
Как вывести многомерный массив в консоль?

Как вывести многомерный массив в консоль?

Создал многомерный массив (3x5), теперь надо вывести в консольКак можно это сделать?

219