在java中总是需要一个else吗?

时间:2017-02-15 05:40:16

标签: java if-statement

class ChangeCase{
  public static void main(String args[])
    throws java.io.IOException{
    char response;
    int count = 0;
    System.out.println("You can keep feeding me input. Enter a period to stop me.");
    do{
      response = (char) System.in.read();
      if(response != '\r' & response != '\n') {
        if(response >= 65 & response <= 90) {

          response = (char) (response + 32);
          count++;
        }
        if(response >= 97 & response <= 122) {

          response = (char) (response - 32);
          count++;
        }
        System.out.print(response);
      }
      if(response == '\n') System.out.print('\n');
    } while(response != '.');
    System.out.println("\n" + count);
  }
}

当我通过在第二个if语句之前添加“else”来对此代码进行一次更改时,代码按照我希望的方式工作。它吐出用户的输入。它将大写更改为小写,反之亦然。但是因为它无法将大写改为小写。我想知道原因。

4 个答案:

答案 0 :(得分:0)

您所看到的是else-if构造。

在您的情况下,将始终评估两个if语句。但是,当您添加else时,如果第一个评估为false

,则第二个语句只会被评估一次

答案 1 :(得分:0)

如果你不放else,它会同时执行if个。首先更改为大写然后更改为小写。你想要或不想要两者。

答案 2 :(得分:0)

如果它们的两个条件都有效执行,则会执行两个连续的if语句。这是这个问题中最简单,最不模糊的部分。

因为您正在改变用于测试条件的数据, 两个 if语句都会执行。 是您尝试解决的更复杂,更细微的问题。

简单的调试将公开这个:

    输入了
  • 'A'。它符合第一个if语句的条件,并立即降低(通过向字符添加32),从而产生'a'
  • 'a'由紧随其后的if语句进行测试 - 因为变量response已更改,当然它也符合该要求。作为回应,该字符立即上限(通过从字符中减去32),得到'A'

现在,如果您停止执行您的应用程序,由于您计算if块内的交互的方式,您将获得2而不是1。

缓解可以为您的第二个else添加if,但我不确定它是否为最好的方法。您还可以在等式中引入一个新变量,以确保不会发生输入突变,这将更加理想。

class ChangeCase {
    public static void main(String args[])
            throws java.io.IOException {
        char response;
        char result = '\0'; // This holds the result now
        int count = 0;
        System.out.println("You can keep feeding me input. Enter a period to stop me.");
        do {
            response = (char) System.in.read();
            if (response != '\r' & response != '\n') {
                if (response >= 65 & response <= 90) {

                    result = (char) (response + 32);
                    count++;
                }
                if (response >= 97 & response <= 122) {

                    result = (char) (response - 32);
                    count++;
                }
                System.out.print(result);
            }
            if (response == '\n') {
                System.out.print('\n');
            }
        } while (response != '.');
        System.out.println("\n" + count);
    }
}

答案 3 :(得分:0)

// Option 1
if(response >= 65 & response <= 90) {

  response = (char) (response + 32);
  System.out.print(response);
  count++;
  continue;
}
if(response >= 97 & response <= 122) {

  response = (char) (response - 32);
  System.out.print(response);
  count++;
  continue;
}


// Option 2
if(response >= 65 & response <= 90) {

  response = (char) (response + 32);
  count++;
}else if(response >= 97 & response <= 122) {

  response = (char) (response - 32);
  count++;
}
System.out.print(response);