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”来对此代码进行一次更改时,代码按照我希望的方式工作。它吐出用户的输入。它将大写更改为小写,反之亦然。但是因为它无法将大写改为小写。我想知道原因。
答案 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);