我正在尝试从该程序获取奇数。当我运行测试时,我得到的是偶数和奇数。我该怎么解决这个问题?我想念什么吗?
public static String getOddNumbers(int start, int stop) {
String response = "";
for(int x=start; x <stop; x++){
response += ""+x;
}
return response;
}
答案 0 :(得分:0)
您从头到尾都在逐一递增x。要获得[start,stop]范围内的所有奇数,您需要从start之后的第一个奇数开始(包括两端),并以2开头。
public static String getOddNumbers(int start, int stop) {
String response = "";
if (start%2==0) ++start;
for(int x=start; x <stop; x += 2){
response += ""+x;
}
return response;
}
答案 1 :(得分:0)
调试功能的一种好方法是在脑海中手动运行它。例如,如果我们调用getOddNumbers(1,5):
start:
response = "", x = 1
Line 4 runs, followed by the x++ on line 3
response = "1", x = 2
Line 4 and 3 run again
response = "12", x = 3
Line 4 and 3 run again
response = "123", x = 4
and so on...
所以问题是您允许x在代码块中保持偶数,在代码块中告诉它将x附加到字符串。要解决此问题,您需要(a)编写一些内容以确保循环以奇数开始,并且(b)每次将x增加2而不是1。或者,可以包含一个额外的if语句因此仅在x%2!= 0时才将x添加到字符串中,但这会降低效率。
答案 2 :(得分:0)
您的程序到目前为止正在做的是:
程序不执行的操作是:
要获得预期结果,您需要:
可以使用模运算符(%)来检查数字是偶数还是奇数。如果条件x % 2 == 0
为真,则该数字为偶数,因此,如果x % 2 != 0
该数字为奇数。因此,如果您在具有上述条件的response += ""+x;
行之前添加if语句,则您的方法将按预期工作。
user2244399的答案更加有效,因为您只需要枚举奇数。
答案 3 :(得分:0)
在这里,您的代码已被修改以给出正确的答案。您只需检查数字是否为奇数,即数字是否可被2整除。通过检查来完成:if(x%2 == 0)
public static String getOddNumbers(int start, int stop) {
String response = "";
for(int x=start; x <stop; x++){
if(x%2 != 0) {
response += " "+x;
}
}
return response;
}