首页 > 解决方案 > 当我希望它根据条件时,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;
    }

标签: java

解决方案


问题在于你的for循环。

您指示循环在i小于或等于时运行end。这在纸上听起来不错,但你确实意识到这个陈述

if ((start<=0) || (end<=0) || (end<start))

永远不会运行(在end大于的情况下start),因为iis 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


推荐阅读