возникает ошибка ArrayIndexOutOfBoundsExceotion : Index 0 out of bounds for length 0

Моя задача: Напишите метод, который получает в качестве параметра массив, каж­дый элемент которого является строкой. Метод должен вернуть строку, содержащую максимальное количество заглавных букв. Мой код :

    import java.util.Scanner;
    
    public class Check {
        int result ;
        int k = 0;
        int x;
        int y;
        int []n =new int[x];
        String [][] arrCh = new String[x][y];
        protected Check(int x,int y){
            this.x = x;
            this.y = y;
        }
        void getMatrix() {
            Scanner scanner = new Scanner(System.in);
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < y; j++) {
                    arrCh[i][j] = scanner.nextLine();// ***Ошибка показывает на данную строку***
                }
            }
        }
    
        public void Checker(){
            for(int i = 0; i < x; i++){
                for(int o = 0; o < y; o++){
                    char[] Char = arrCh[i][o].toCharArray();
                    for(int z = 0; z < Char.length; z++){
                        if(Character.isUpperCase(z)){
                            k++;
                        }
                    }
                }
                n[i] = k;
                System.out.println(n[i]);
            }
        }
    }
public class Main {
    public static Scanner in = new Scanner(System.in);
    public static void main(String[] args) {
        int x = in.nextInt();
        int y = in.nextInt();
        String [][] arr = new String[x][y];
        Check check = new Check(x,y);
        check.getMatrix();
        check.Checker();
    }
}

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

Автор решения: Arty Morris

Похоже что массив объявляется раньше,чем класс получает значения x y. Попробуйте сначала получить, а затем создать массив

 String [][] arrCh;
    protected Check(int x,int y){
        this.x = x;
        this.y = y;
        arrCh = new String[x][y];
    }
→ Ссылка
Автор решения: Дмитрий

Я все понимаю, но вам не кажется, что для поиска слова в массиве с наибольшим количеством букв в верхнем регистре, это слишком сложно??? Принцип KISS вроде никто не отменял или я что-то пропустил?

import java.util.Arrays;
import java.util.Comparator;

public class Main {

    public static void main(String[] args) {
        String[] arr = {"asFgDe", "1fwe5RSDFRf", "FGrtk343A"};
        System.out.println(find(arr));
    }

    private static String find(String[] arr) {
        return Arrays.stream(arr).max(Comparator.comparing(Main::upperCaseCount)).get();
    }

    private static long upperCaseCount(String args) {
        return args.chars().filter(ch -> Character.isUpperCase(ch)).count();
    }

}
→ Ссылка