所以我的任务是编写一个确定数字是否平淡的程序。意思是,如果你拿一个数字: 例如,57,你添加每个数字的平方,5 * 5 + 7 * 7,现在是新的数字:74。并且你继续这样做,直到你得到58,这意味着数字不是平淡的,或者你得到1,这意味着数字是。 58将重复一个总是以58结尾的序列。
所以我想用一些基本的递归尝试它,但也许我误解了这里使用递归。
以下是我写的两个相关方法:
public static boolean insipid(int num){
int dig1 = 0, dig2 = 0, dig3 = 0; // num = 159 for example, dig1 would be 1. Default is 0 in case of a 2 digit number, dig1*dig1 = 0
if(num == 58){ //The number is not insipid
return false;
}
if(num == 1){ // the number is insipid
return true;
}
if (num < 10){
insipid(num * num);
}
if(num>99){
dig1 = (int)(num / 100);
dig2 = (int)((num - 100)/10);
dig3 = num - (((int)(num / 10))*10);
insipid(squaresum(dig1,dig2,dig3));
}
else{
dig2 = (int)(num/10); //the 10s place
dig3 = num - (((int)(num/10)) * 10); // the 1's place
insipid(squaresum(dig1, dig2,dig3)); //dig1 = 0 so I just pass it along with it.
}
}
public static int squaresum(int dig1, int dig2, int dig3){
//Returns the sum of three digits squared.
return (dig1 * dig1) + (dig2 * dig2) + (dig3 + dig3);
}
它给我一个错误,说每当我提供一个数字时,Insipid()必须返回一个布尔值。但我知道任何数字,因为它总是最终解析为58或1.所以不应该返回true或false总是最终返回所以返回一个布尔值并且错误无效?显然事实并非如此,但我是如何看待它的。这里使用的递归是无效的吗?
另外,如果你对我如何清理它有任何建议,我不介意严厉的批评,我的java不是很好。
答案 0 :(得分:2)
如果您使用了解决方案,那么唯一缺少的是递归调用incipid
的返回语句。
答案 1 :(得分:1)
更新你的平淡如下。使用return
声明的方法必须在所有情况下返回值。如果你的方法达到第二个,那么你的方法不会返回任何值,即如果数字不是1&amp; 58。
public static boolean insipid(int num){
boolean returnValue = false;
if(num == 58){ //The number is not insipid
//do nothing
} if(num == 1){ // the number is insipid
returnValue = true;
}else{
int dig1 = 0, dig2 = 0, dig3 = 0; // num = 159 for example, dig1 would be 1. Default is 0 in case of a 2 digit number, dig1*dig1 = 0
if (num < 10){
returnValue = insipid(num * num);
}
else if(num>99){
dig1 = (int)(num / 100);
dig2 = (int)((num - 100)/10);
dig3 = num - (((int)(num / 10))*10);
returnValue = insipid(squaresum(dig1,dig2,dig3));
}
else{
dig2 = (int)(num/10); //The 10s place
dig3 = num - (((int)(num/10)) * 10); //the 1s place
returnValue = insipid(squaresum(dig1, dig2,dig3)); //dig1 = 0 so I just pass it along with it.
}
}
return returnValue ;
}
请注意:我刚刚尝试回答有关退货问题的问题。
答案 2 :(得分:0)
除了Yogendra Singh的回答,你的数字计算错误:例如:与
dig2 = (int)((num -100)/10);
你假设数百位是1.试试
dig2 = (int)((num - dig1 * 100)/10);
,同样适用于dig3
。