возникает ошибка 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();
}
}