我正在尝试创建一个程序来查找给定数字的长度。我以为我可以通过将数字除以10然后检查数字是否小于等于0来做到这一点。我确实想编辑全局数字,因此我创建了该数字的实例版本并将其用作条件在for循环中。
很明显,这项工作很自然,所以我最终在调试器中查找了正在发生的事情。看起来该程序似乎完全跳过了for循环,将不胜感激。
public static void sumFirstAndLastDigit(int number) {
int numberLength = 0;
int instanceNumber = number;
for(int i = 0; instanceNumber <= 0; i++) {
instanceNumber /= 10;
numberLength = i;
}
System.out.println("Number length = " + numberLength);
// to find length of number loop division by 10
}
}
程序应使用for循环将其除以10,直到数字等于或小于零为止,并且循环应以数字长度整数存储多少次。在这种情况下,编号为12321的答案应该为6,但打印为0。
答案 0 :(得分:6)
您正在告诉它在instanceNumber <= 0
时循环播放。 for
循环中的“测试”是“继续进行”测试,而不是终止测试。只要测试为 true ,循环就会继续。
根据您的描述,您需要instanceNumber > 0
。
还要注意Avinash Gupta's point,使用当前代码,您将被少计一分。我可以通过使用完全不同的循环来解决这个问题:
int numberLength = 0;
int instanceNumber = number;
while (instanceNumber > 0) {
++numberLength;
instanceNumber /= 10;
}
这是很好的和明确的:如果instanceNumber > 0
递增numberLength
,然后除以10,然后重试。
答案 1 :(得分:2)
这将打印正确的输出
public static void sumFirstAndLastDigit(int number) {
int numberLength = 0;
int instanceNumber = number;
for(int i = 0; instanceNumber > 0; i++) {
instanceNumber /= 10;
numberLength = i;
}
System.out.println("Number length = " + (numberLength + 1));
}
答案 2 :(得分:0)
如果对算法使用while循环,您的代码将更加全面。
public static void sumFirstAndLastDigit(int number) {
int numberLength = 0;
int instanceNumber = number;
while(instanceNumber != 0) {
instanceNumber /= 10;
numberLength += 1;
}
System.out.println("Number length = " + numberLength);
// to find length of number loop division by 10
}
答案 3 :(得分:0)