在java中是否总是需要else? class-ChangeCase{ 公共静态void main(字符串参数[]) 抛出java.io.IOException{ 字符响应; 整数计数=0; System.out.println(“您可以继续向我输入。输入一个句点来阻止我。”); 做{ response=(char)System.in.read(); 如果(响应!='\r'&响应!='\n'){ if(response>=65&response=97&response

在java中是否总是需要else? class-ChangeCase{ 公共静态void main(字符串参数[]) 抛出java.io.IOException{ 字符响应; 整数计数=0; System.out.println(“您可以继续向我输入。输入一个句点来阻止我。”); 做{ response=(char)System.in.read(); 如果(响应!='\r'&响应!='\n'){ if(response>=65&response=97&response,java,if-statement,Java,If Statement,您所看到的是一个else if结构 在您的情况下,两个if语句都将被计算。但是,当您添加else时,如果第一个语句的计算结果为false,则第二个语句将只计算一次。如果您不放置else,它将执行两个if语句。首先更改为大写,然后更改为小写。您可以两个条件都可以执行。如果两个条件都可以执行,则将执行两个连续的if语句。这是这个问题中最简单、最不含糊的部分 因为您正在变异用于测试您的条件的数据,两个if语句都将执行。这是您试图解决的更复杂、更微妙的问题 一个简单的调试将公开以下内容: 输入'A'。

您所看到的是一个
else if
结构


在您的情况下,两个
if
语句都将被计算。但是,当您添加
else
时,如果第一个语句的计算结果为
false
,则第二个语句将只计算一次。如果您不放置
else
,它将执行两个
if
语句。首先更改为大写,然后更改为小写。您可以两个条件都可以执行。

如果两个条件都可以执行,则将执行两个连续的
if
语句。这是这个问题中最简单、最不含糊的部分

因为您正在变异用于测试您的条件的数据,两个
if
语句都将执行。这是您试图解决的更复杂、更微妙的问题

一个简单的调试将公开以下内容:

  • 输入
    'A'
    。它符合第一个
    if
    语句的条件,并立即小写(通过在字符中添加32),从而生成
    'A'
  • 'a'
    由紧跟其后的
    if
    语句进行测试-因为变量
    response
    已更改,当然它也满足该要求。作为响应,字符立即大写(从字符中减去32),从而产生
    'a'
现在,如果停止应用程序的执行,由于计算
if
块中的交互的方式,将得到2而不是1

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

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);
  }
}
class-ChangeCase{
公共静态void main(字符串参数[])
抛出java.io.IOException{
字符响应;
char result='\0';//现在保存结果
整数计数=0;
System.out.println(“您可以继续向我输入。输入一个句点来阻止我。”);
做{
response=(char)System.in.read();
如果(响应!='\r'&响应!='\n'){
如果(响应>=65&response=97&response
//选项1

如果(response>=65&response=97&response=65&response=97&response With the
else
,它只会执行其中的一个子句;如果没有它,它将执行所有正确的子句。我想你是想使用
&
而不是
&
@Joseph Guzman:这是因为。如果条件都是可执行的以大写字母为单位进行剪切。例如,您键入“A”。第一个if将执行,转换后您的响应为“A”。但此响应“A”对第二个if语句也有效。因此它再次将其转换为大写字母“A”。我建议在此处使用else if。@ScaryWombat:按位and足够有效;是的,OP可能打算使用逻辑and,但我在这种情况下,它只是意味着双方都得到了评估,而不是短路。正如你所知道的,你不应该在你的问题中给出你的答案。下面的答案部分就是为了这个。如果答案对你有帮助,接受它。如果你有自己的答案,添加它。好的,谢谢,所以我的代码在这里改变了两次情况。是的,它向前,然后向后到你开始的地方。@Carcigenicate我在用它来显示构造背后的想法,而不是实际的代码。啊,有道理。
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);
    }
}
// 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);