为什么在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();
是另一种方法。如果没有,则使用不当。