【问题标题】:Android Studio count not outputting number correctlyAndroid Studio 计数未正确输出数字
【发布时间】:2020-03-29 22:39:56
【问题描述】:

我编写了一个代码来显示使用元音的次数。 A、E、I、O、U。代码正在计数,但计数不正确。

 @Override
            public void onClick(View v) {
                int letter1 = 0;
                int letter2 = 0;
                String enter1 = str1.getText().toString();
                String enter2 = str2.getText().toString();

                for (int i = 0; i < str1.length(); i++) {
                    if (enter1.charAt(i) == 'a' || enter1.charAt(i) == 'e' || enter1.charAt(i) == 'i' || enter1.charAt(i) == 'o' ||
                            enter1.charAt(i) == 'u')
                    {
                        letter1++;
                    }

                 for(int j = 0; j < str2.length(); j ++){
                     if(enter2.charAt(j) == 'a' || enter2.charAt(j) == 'e' || enter2.charAt(j) == 'i' || enter2.charAt(j) == 'o' ||
                             enter2.charAt(j) == 'u')
                     {
                         letter2++;
                     }
                 }

                  display3.setText("The amount of vowels are :"+ letter1 + " & " +  letter2);
                }

            }
        });

我的 Hello World 输出是 2 和 5。Hello 的 2 是正确的,但 World 的 5 不是。我错过了什么?

【问题讨论】:

  • 试着检查你的括号

标签: android counter


【解决方案1】:

括号有问题

@Override
        public void onClick(View v) {
           for(Loop){
                   if(condition){

                    }
            }//first loop

            for(Loop){
                   if(condition){

                    }
            }//second loop


           //display here              

        });//end for onClick

【讨论】:

    【解决方案2】:

    如果我们稍微重新格式化代码,问题就更明显了:

     for (int i = 0; i < str1.length(); i++) {
         if (enter1.charAt(i) == 'a' || enter1.charAt(i) == 'e' || enter1.charAt(i) == 'i' || enter1.charAt(i) == 'o' ||
             enter1.charAt(i) == 'u') {
             letter1++;
         }
    
         for (int j = 0; j < str2.length(); j++) {
             if (enter2.charAt(j) == 'a' || enter2.charAt(j) == 'e' || enter2.charAt(j) == 'i' || enter2.charAt(j) == 'o' ||
                 enter2.charAt(j) == 'u') {
                 letter2++;
             }
         }
    
         display3.setText("The amount of vowels are :" + letter1 + " & " + letter2);
     }
    

    如您所见,第二个for 循环位于第一个循环内。这意味着第二个数字将比它应该的大 N 倍,其中 N 是第一个单词的长度。这与正在发生的事情相符:“world”中只有 1 个元音,但“hello”中有 5 个字母。

    display3.setText(...) 部分也将被执行 N 次,但由于它会覆盖之前的值,您将无法注意到这一点,而您只会看到最终值。

    要修复,只需提前关闭第一个 for 循环:

     for (int i = 0; i < str1.length(); i++) {
         if (enter1.charAt(i) == 'a' || enter1.charAt(i) == 'e' || enter1.charAt(i) == 'i' || enter1.charAt(i) == 'o' ||
             enter1.charAt(i) == 'u') {
             letter1++;
         }
     }
    
     for (int j = 0; j < str2.length(); j++) {
         if (enter2.charAt(j) == 'a' || enter2.charAt(j) == 'e' || enter2.charAt(j) == 'i' || enter2.charAt(j) == 'o' ||
             enter2.charAt(j) == 'u') {
             letter2++;
         }
     }
    
     display3.setText("The amount of vowels are :" + letter1 + " & " + letter2);
    

    【讨论】:

      【解决方案3】:

      不太确定android studio, 但是在 Java 中,如果你想比较 2 个字符串,那么你可以使用 .equals() 方法。

      所以你的代码将是

      enter1.charAt(i).equals("a");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-15
        • 1970-01-01
        • 1970-01-01
        • 2014-07-20
        • 1970-01-01
        • 2013-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多