在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'
语句的条件,并立即小写(通过在字符中添加32),从而生成if
'A'
由紧跟其后的'a'
语句进行测试-因为变量if
已更改,当然它也满足该要求。作为响应,字符立即大写(从字符中减去32),从而产生response
'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 theelse
,它只会执行其中的一个子句;如果没有它,它将执行所有正确的子句。我想你是想使用&
而不是&
@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);