#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
это имя массива. Когда вы добавляете[]
оператор, вы пытаетесь извлечь achar
из массива, а у achar
нет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
}