【问题标题】:Something wrong in "Character Count Java Program"“字符数 Java 程序”中有问题
【发布时间】:2013-02-22 22:03:30
【问题描述】:

这个程序应该计算用户输入的字符数。 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 个。怎么了?

【问题讨论】:

    标签: java loops count character


    【解决方案1】:

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

    if (sym == '!' || sym == '=' || sym == '@' || ...){
            other++;
    }
    

    【讨论】:

      【解决方案2】:

      试试

      else {
          other++;
      }
      

      而不是

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

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

      【讨论】:

        【解决方案3】:

        如果您查看ascii 表,您会看到:
        '!' = 33
        '=' = 61
        '@' = 64

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

        if (sym >= '!' && sym <= '@') {...}
        

        【讨论】:

          【解决方案4】:

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

          else {
              other++;
          }
          

          你目前在哪里:

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

              看这里,希望答案会自己呈现!

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

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

              【讨论】:

                【解决方案7】:

                试试这个:

                        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++;
                        }
                

                【讨论】:

                • 补充说明:“!”的ascii范围内可能会排除特殊符号和“=”
                猜你喜欢
                • 1970-01-01
                • 2011-08-16
                • 1970-01-01
                • 1970-01-01
                • 2016-06-19
                • 1970-01-01
                • 2013-08-14
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多