当前位置: 首页 > 知识库问答 >
问题:

我的if else语句有什么问题?

严斌
2023-03-14

我制作了这个简单的GUI程序,它可以计算特定字符序列的元音和辅音。计数器还可以,但是我对if-else语句有一个问题,当那个字符既不是元音也不是辅音时,我必须显示一条消息...代码如下:

//I initialized these variables:

    public static int vowels = 0, consonants = 0, charac = 0;
    public static String outputStr;
    public static String conso = "bcdfghjklmnpqrstvwxyz";
    public static String vow = "aeiou";

    //Here's the code for my "count" button
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

        String userInput = jTextField1.getText();
        userInput = userInput.toUpperCase();
        conso = conso.toUpperCase();
        vow = vow.toUpperCase();
        String wordInput[] = userInput.split("");

        vowels = 0;
        consonants = 0;
        charac = 0;

        for(int i=0; i<wordInput.length; i++) {
            for(int j=0; j<5; j++) {
                char v = vow.charAt(j);
                String VL = Character.toString(v);
                if(VL.equals(wordInput[i])) {
                    vowels ++;
                    charac = 0;}
                else {
                    charac += 1; }
                }

            for(int h=0; h<21; h++) {
                char c = conso.charAt(h);
                String CL = Character.toString(c);
                if(CL.equals(wordInput[i])) {
                    consonants ++;
                    charac = 0; }
                else {
                    charac += 1; }
            }

        }

        String totalVow = Integer.toString(vowels);
        String totalCons = Integer.toString(consonants);

        jLabel5.setText(totalVow);
        jLabel6.setText(totalCons);


    //here's the if-else statement:

        if (charac == 0) {
            jLabel7.setText(" ");
        }
        else if (charac >= 1) {
            jLabel7.setText("The sequence contains invalid characters.");
        }
        if (userInput.isEmpty()) {
            jLabel7.setText("No input.");
        }
}

它看起来是这样的:

我输入了一个没有任何特殊字符或数字的字符“序列”。但它仍然显示消息,其中它有元音和辅音以外的其他字符。if-else语句有问题吗?感谢您的帮助:)

共有3个答案

经嘉
2023-03-14

如果错误,则计算无效字符的逻辑。你要做的是:每次字符不是你刚刚测试的字符时,你都会增加计数器,也就是说,对于你输入的每个字符,charac 变量增加 25 倍!但是,下次字符与当前测试的元音或辅音匹配时,您将charac变量重置为0!

您可以使用内置的String方法来检查当前字符是元音还是辅音,而不是使用两个<code>for</code>循环分别检查每个元音和辅音,例如<code>indexOf</code<。这样,检查就减少到一个if语句,这样既不是元音也不是辅音时就更容易使用“else”格。

for (int i = 0; i < userInput.length(); i++) {
    char c = userInput.charAt(i);
    if (vow.indexOf(c) != -1) {
        vowels++;
    } else if (conso.indexOf(c) != -1) {
        consonants++;
    } else {
        charac++; // invalid character
    }
}

另外,请注意,除了将字符串拆分为字符串数组之外,还可以使用 charAt 方法。

宋弘壮
2023-03-14

你把不相关的代码放入你的循环中。你的循环应该像:

 for(int i=0; i<wordInput.length; i++) {
   char ch=wordInput.charAt(i);
   if(Character.isLetter(ch)){
     if(isVowel(ch)){// make a method which return true if char is vowel.
      vowel++;
     }
     else{
     consonent++;
     }
   }
 }
米承嗣
2023-03-14

问题出在内部for循环中。每个字符都用5个不同的元音中的每一个进行测试,因此它肯定无法匹配至少4个元音,并且character将递增

for(int j=0; j<5; j++) {
    char v = vow.charAt(j);
    String VL = Character.toString(v);
    if(VL.equals(wordInput[i])) {
        vowels ++;
        charac = 0;}
    else {
        charac += 1;
    }
}

相反,您可以使用String.contains()方法来代替内部循环。

 类似资料:
  • 我用R编写了以下代码,效果很好。但是,假设我必须对具有多个级别的因子变量应用类似的代码(

  • 我有一个SQL存储过程,我需要转换为Oracle。我有一些语法问题。 我当前遇到的错误是: 错误(75,1):PLS-00103:在预期以下情况之一时遇到符号“DROP”:(开始情况声明结束异常退出,如果循环mod null pragma raise return选择更新 我想我还有很多。有人能帮我找出我做错了什么吗? 以下是我所拥有的: 以下是原始SQL代码:

  • 问题内容: 谁能看到为什么此开关不起作用? 在此语句中,始终返回默认值,但是在对switch表达式进行硬编码时,switch块会按预期工作。查看ReadString()函数代码,它返回一个字符串,因此我看不到任何原因导致我的示例不起作用。 难道我做错了什么?! 问题答案: 您的文本包含两个字节:是2和是1。 您第二个符号是不可见的,您可以尝试使用将其删除。

  • 本文向大家介绍语句for( ;1 ;) 有什么问题?它是什么意思?相关面试题,主要包含被问及语句for( ;1 ;) 有什么问题?它是什么意思?时的应答技巧和注意事项,需要的朋友参考一下 死循环,和while(1)相同。

  • 我刚刚开始学习,我的输出似乎接受第二个if语句为真,即使我的输入大于200。我已经在这里呆了几天了,如果这里有人愿意检查我的代码,那对我来说是很好的。 这是我的代码:

  • 问题内容: 我正在使用 Oracle 10g数据库。 我有以下两个表: 使用ID_DEBTOR字段将这两个表连接在一起。 仅当HEADER不为null时,我才想使用关联的T_DEBTOR.HEADER更新T_ELEMENT.INSURER值。换句话说: 我尝试使用以下SQL查询: 该查询适用于与HEADER不为null的债务人链接的所有元素。但是,当T_DEBTOR.HEADER为null时,此查