java - 当我希望它根据条件时,for循环没有返回-1
问题描述
问题是当一个小于或等于 0 的整数作为 'end' 的参数传递时,当 'end' 小于 'start' 时它不会返回 -1。
public static boolean isOdd (int number)
{
if (number < 0)
{
return false;
}
else
{
if (number % 2 != 0 )
{
return true;
}
else
{
return false;
}
}
}
这是测试参数'start'和'end'的方法
public static int sumOdd (int start, int end)
{
int sum = 0;
for (int i = start; i<=end; i++)
{
if ((start<=0) || (end<=0) || (end<start))
{
return -1;
}
else
{
if (isOdd(i))
{
sum+=i;
}
}
}
return sum;
}
解决方案
问题在于你的for
循环。
您指示循环在i
小于或等于时运行end
。这在纸上听起来不错,但你确实意识到这个陈述
if ((start<=0) || (end<=0) || (end<start))
永远不会运行(在end
大于的情况下start
),因为i
is start
,并且如果end
大于start
,因此它大于i
,这将不满足您之前在 for 循环中定义的条件,i is smaller or equal to end
. 因此,for
循环将永远不会运行。
你应该这样做:
public static int sumOdd(int start, int end) {
int sum = 0;
if ((start <= 0) || (end <= 0) || (end < start)) {
return -1;
} else {
for (int i = start; i <= end; i++) {
if (isOdd(i)) {
sum += i;
}
}
return sum;
}
}
测试运行
sumOdd(1, 0)
返回-1
sumOdd(1, 3)
返回4
推荐阅读
- java - 如何在 Java 运行时动态设置数组名称?
- javascript - 我应该将物化下拉菜单初始化程序放在 Vue js 中的哪个生命周期方法中?
- autohotkey - 如何在 AutoHotKey 中从 DDL 制作菜单下拉菜单
- swift - “VisionFace”类型的值没有成员“轮廓”快速错误
- android - 如何使用改造后参数&body,但我不能一起使用@Filed(FormUrlEncoded)&@Body。我能做些什么?
- math - 这个加法总是会产生一个唯一的数字吗?
- python - 带有排列和重复的正则表达式
- ffmpeg - 使用 FFMPEG 在一个基础图像上叠加多个图像
- java - 使用数组或字符更有效吗?
- git - 如何成功将 odoo 11 应用程序迁移到 odoo 12?