4

该程序应该计算用户输入的字符数。other 是其他字符,例如 !、@、$ 等。它不应该计入 #。以下是我执行此操作的代码:

public class countchars {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);

        char sym;
        int up = 0;
        int low = 0;
        int digit = 0;
        int other = 0;

        System.out.print("Enter a character # to quit: ");
        sym = input.next().charAt(0);

        while (sym != '#') {
            System.out.print("Enter a character # to quit: ");

            if (sym >= 'a' && sym <= 'z') {
                low++;
            }
            if (sym >= 'A' && sym <= 'Z') {
                up++;
            }
            if (sym >= '0' && sym <= '9') {
                digit++;
            }
            if (sym >= '!' && sym <= '=') {
                other++;
            }

            sym = input.next().charAt(0);

        }

        System.out.printf("Number of lowercase letters: %d\n", low);
        System.out.printf("Number of uppercase letters: %d\n", up);
        System.out.printf("Number of digits: %d\n", digit);
        System.out.printf("Number of other characters: %d\n", other);
    }
}

问题在于“其他”计数器。如果我输入 !、@ 和 $,它只会计算输入的 3 个字符中的 2 个。怎么了?

4

7 回答 7

3

如果你看一下ascii表,你会看到:
'!' = 33
'=' = 61
'@' = 64

'@' 字符不在您指定的范围内,因此不计算在内,请将最后一个条件替换为:

if (sym >= '!' && sym <= '@') {...}
于 2013-03-07T16:00:03.720 回答
1

尝试

else {
    other++;
}

代替

if (sym >= '!' && sym <= '=') {
    other++;
}

#不会被视为other因为您已经在while条件中对其进行了过滤。

于 2013-03-07T15:58:52.643 回答
1

试试这个:

        if (sym >= 'a' && sym <= 'z') {
            low++;
        } else if (sym >= 'A' && sym <= 'Z') {
            up++;
        } else if (sym >= '0' && sym <= '9') {
            digit++;
        } else {
            other++;
        }

或者,您可以选择该字符可以是什么的短集:

        } else if ("%!$&".contains(sym)){
            other++;
        }
于 2013-03-07T16:07:29.570 回答
0

您应该在条件中使用 OR(||) 而不是 AND(&&)

if (sym == '!' || sym == '=' || sym == '@' || ...){
        other++;
}
于 2013-03-07T15:57:44.890 回答
0

确保你抓住“其他一切”;您只需使用一个else子句。这样你就不会错过任何事情,就像你现在正在做的那样(因为'@'不在你检查的范围内)。你要这个:

else {
    other++;
}

你目前有这个:

if (sym >= '!' && sym <= '=') {
    other++;
}
于 2013-03-07T16:01:02.300 回答
0

您根据 ASCII 值比较 char 。@ASCII 是 64!ASCII 是 33 = ASCII 是 61

所以@不在“!”之间 和“=”并且不会增加您的计数器。

于 2013-03-07T16:01:22.653 回答
0

看这里,希望答案会呈现出来!

http://en.wikipedia.org/wiki/UTF-8

你确定序列 $,5,$ 会给你正确的答案吗?;)

于 2013-03-07T16:03:03.120 回答