为什么在B部分中发生错误?

说明:
以下Numbers类将用于分析和检索数字集。

public class Numbers
{
/** @param nums is a positive non-decimal value
* Precondition: nums>=0
* @return false if the sum of digit divisors of num is odd
* @return true if the sum of the digit divisors of num is even
*/
public static boolean isSilly(int value)
{
/* to be implemented in part(a) */
}

/* @param count is a positive non-decimal value
* Precondition: count >0
* @return an array containing count Silly numbers
*/
public static int[] getSomeSillyNumbers(int count)
{
*/ to be implemented in part(b) */
}
// There may be varialbes/fields,constructors, and methods that are not shown.
}


A.编写Numbers方法isSilly(),如下所示。 isSilly()将为整数,并确定该整数是否为Silly。

傻数是指具有除数为偶数的数字的任何数字。总和必须大于零。

调用isSilly(12)将返回false,因为12的数字除数之和为3-[1,2],这是奇数。

/** @param num is a positive non-decimal value
* Precondition: value >=0
* @return false if the sum of digit divisor of num is odd
@return true if the sum of the digit divisor of the num is even
*/


我为A做的事

public static boolean isSilly(int value)
{
    int sum = 0;
    while (value > 0)
    {
        sum = sum + value % 10;
        value = value / 10;
    }
    if (sum%2==0)
        return true;
    else
        return false;
}


B.如下所示,编写Numbers方法getSomeSillyNumbers()。
getSomeSillyNumbers()将收到要返回的傻数的计数。

调用getSomeSillyNumbers(3)将返回[2,4,6]。

您必须从a部分调用该方法,并假定该方法按照指定的方式工作,无论您编写了什么内容。

/* @param count is a positive non-decimal value
* Precondition: stop>0
* @return an array containing count Silly numbers
*/


我为B做的事

public static int[] getSomeSillyNumbers(int count)
{   int[] getSomeSillyNumbers = new int[count];
    while(count!=0)
    {

        if(isSilly(count))
        {
            int i=0;
            getSomeSillyNumbers[i]=count;
            i++;

        }

        count --;
    }
    System.out.println(Arrays.toString(getSomeSillyNumbers));
    return getSomeSillyNumbers;
}


更新资料

我的整个代码是这样的:

import java.util.Arrays;
public class Numbers
{
    public static boolean isSilly(int value)
    {
        int sum = 0;
        while (value > 0)
        {
            sum = sum + value % 10;
            value = value / 10;
        }
        if (sum%2==0)
            return true;
        else
            return false;
    }

    public static int[] getSomeSillyNumbers(int count)
    {   int[] getSomeSillyNumbers = new int[count];
        int i=0;
        while(count!=0)
        {
            if(isSilly(count))
            {
                getSomeSillyNumbers[i]=count;
                i++;
            }
            count--;
        }
        System.out.println(Arrays.toString(getSomeSillyNumbers));
        return getSomeSillyNumbers;
    }
}


与跑步者:

    import java.util.Arrays;
public class NumbersRunner
{
    public static void main(String[] args)
    {
        Numbers runner = new Numbers();
        runner.isSilly(12);
        runner.isSilly(15);
        runner.isSilly(26);
        runner.isSilly(8);
        runner.isSilly(1234);
        runner.getSomeSillyNumbers(3);
        runner.getSomeSillyNumbers(15);
    }
}


我正进入(状态:

[2, 0, 0]
[15, 13, 11, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0]


我什么时候应该得到

[2,4,6]
[2,4,6,8,11,15,20,22,24,26,28,32,33,40,42]

最佳答案

B部分中存在以下错误:


您每次在循环内的int[] getSomeSillyNumbers行中都重新创建int[] getSomeSillyNumbers = new int[count];,因此它将始终只有1个值,即count的最新值。要解决此问题,请在循环外部创建getSomeSillyNumbers数组,即在int[] getSomeSillyNumbers = new int[count];循环之前放置while行。
i的声明在while循环的int i=0;行中是局部的。因此,每次都会重新创建它并使用0对其进行初始化。要解决该问题,请将int i=0;行放在while循环之前。


注意:我假设返回行中的getSomeSillyNumbers();是另一种方法。如果没有,则使用不当。

07-24 09:32