Java ‘ошибка: ожидаемый класс’ при usig метод длины массива

#java #class

#java #класс

Вопрос:

Я выполняю задание для своего класса Java, которое требует от меня написать программу, которая отображает количество прописных букв в строке. Я получаю сообщение об ошибке в моей строке 26 (for (int i = 0; i <ch[].length; i ){) любая помощь будет оценена.

 import java.util.Scanner;

public class Uppercase{
    public static void main(String[] args){
        char[] newWord;
        Scanner userWord = new Scanner(System.in);
        System.out.println("Enter a word");
        
        String word = userWord.nextLine();
        
        System.out.println("There are "   newWord.numUppercase(word)   "uppercase letters");
    }
    
    public int numUppercase(String s){
        char[] ch = new char[s.length()];
        
        for (int i = 0; i < s.length(); i  ){
            ch[i] = s.charAt(i);
            
        int uppercase = 0;
        for (int i = 0; i < ch[].length; i  ){
            if(ch[i].valueOf() > 64 amp;amp; ch[i].valueOf() < 91){
                uppercase  ;
            }
        }
        return uppercase;
        }
    }
}
 

Комментарии:

1. ch это имя массива. Когда вы добавляете [] оператор, вы пытаетесь извлечь a char из массива, а у a char нет length поля.

Ответ №1:

Ваш исправленный класс:

 public class Uppercase{
public static void main(String[] args){
    Scanner userWord = new Scanner(System.in);
    System.out.println("Enter a word");

    String word = userWord.nextLine();

    System.out.println("There are "   numUppercase(word)   "uppercase letters");
}

public static int numUppercase(String s){
    char[] ch = new char[s.length()];

    for (int i = 0; i < s.length(); i  ){
        ch[i] = s.charAt(i);

        int uppercase = 0;
        for (int j = 0; j < ch.length; j  ){
            if(ch[j] > 64 amp;amp; ch[j] < 91){
                uppercase  ;
            }
        }
        return uppercase;
    }
    return 0;
}}
 

Комментарии:

1. вы исправили только несколько опечаток и форматирование в исходном фрагменте кода, но не ошибку вычисления всех прописных букв. Этот код возвращает 0 для aBCDEFGH и 1 для ABCDEFGH . Как вы думаете, в нем нет ошибок?

Ответ №2:

Помимо опечатки, вычисление прописных букв неверно.

Во-первых, нет необходимости создавать ch массив, копировать символы из входной строки, а затем проверять символы в ch массиве.

Во-вторых, предположение, что прописные буквы находятся в диапазоне [65, 90] , применимо только к английским буквам. Существует несколько Character::isUpperCase методов проверки, является ли символ или кодовая точка Unicode прописными. Character::isUpperCase(char c) существует уже некоторое время, начиная с Java 1.0.

Итак, при этом пример подсчета прописных букв может быть следующим:

 public static int numUpperCase(String s) {
    int num = 0;
    if (s != null) {
        for (char c : s.toCharArray()) {
            if (Character.isUpperCase(c)) num  ;
        }
    }
    return num;
}
 

Oneliner с использованием Stream API:

 static int numUpperCase(String str) {
    return Optional.ofNullable(str)
           .map(s -> (int) s.chars().filter(Character::isUpperCase).count())
           .orElse(0); // if input string is null
}