【问题标题】:Java 'error: class expected' when usig array length method使用数组长度方法时Java'错误:预期类'
【发布时间】:2022-01-13 21:00:26
【问题描述】:

我正在为我的 Java 类做一个作业,要求我编写一个程序来显示字符串中大写字母的数量。我在第 26 行遇到错误(for (int i = 0; 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 && ch[i].valueOf() < 91){
                uppercase++;
            }
        }
        return uppercase;
        }
    }
}

【问题讨论】:

  • ch 是数组的名称。当您添加 [] 运算符时,您试图将 char 从数组中拉出,而 char 没有 length 字段。

标签: java class


【解决方案1】:

除了拼写错误之外,大写字母的计算不正确。

首先,不需要创建ch数组,从输入字符串中复制字符,然后检查ch数组中的字符。

其次,大写字母位于[65, 90] 范围内的假设仅适用于英文字母。有几种Character::isUpperCase 方法可以检查characterUnicode codepoint 是否为大写。 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;
}

使用 Stream API 的 oneliner:

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
}

【讨论】:

    【解决方案2】:

    你的错误修复类:

    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 && ch[j] < 91){
                    uppercase++;
                }
            }
            return uppercase;
        }
        return 0;
    }}
    

    【讨论】:

    • 您只修复了原始代码 sn-p 中的一些拼写错误和格式,但没有修复计算全大写字母的 错误。此代码为 aBCDEFGH 返回 0,为 ABCDEFGH 返回 1。你认为它没有错误吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多