我正在编写一个程序,该程序计算用户定义的整数中的偶数,奇数和零数。奇怪的是,编译器根本不会编译。它显示“错误:变量号可能尚未初始化”。
据我所知,没有意义的是,此循环将确保number
始终初始化。我知道我可以通过在声明中进行初始化来轻松关闭编译器。一直有人告诉我,尽管在声明时进行初始化通常是一个坏主意,以帮助避免逻辑错误。但是我最大的恐惧/困惑是我不知道为什么它不喜欢它。如果有异常,它将在validInput = true
任何情况发生之前被捕获,不是吗?因此,当循环进入检查时,由于validInput
仍为,它将重新启动false
。这甚至不是警告,也不是什么。这是一个很难解决的错误。我想念或看不到什么?
我已经阅读了其他有关if-check的案例,这与可能通过或可能不通过的支票不同。除非程序以某种方式提前退出,否则此循环最终将始终通过(在这种情况下,无论如何它都不会到达for循环)。如果这是重复的话,有人可以指出我找不到的直接相关答案吗?谢谢!
public static void main( String[] args )
{
long number;
boolean validInput = false;
String numStr;
Scanner input = new Scanner(System.in);
do
{
System.out.print("Please enter an integer: ");
numStr = input.next();
try {
number = Long.parseLong(numStr);
validInput = true;
} catch (NumberFormatException e) {
System.out.print("That's not an integer. ");
}
} while (!validInput);
// Break each digit up by dividing by powers of 10.
int evens = 0, odds = 0, zeros = 0;
for (long temp = number; temp > 0; temp /= 10)
{
int digit = (int)(temp % 10);
if (digit == 0)
{
zeros++;
System.out.println(digit + " is a zero digit.");
}
else if (digit % 2 == 0)
{
evens++;
System.out.println(digit + " is an even digit.");
}
else
{
odds++;
System.out.println(digit + " is an odd digit.");
}
}
String evenStr = " even " + ((evens == 1) ? "digit" : "digits");
String oddStr = " odd " + ((odds == 1) ? "digit" : "digits");
String zeroStr = (zeros == 1) ? " zero" : " zeros";
System.out.println(number + " has " + evens + evenStr + ", " + odds + oddStr + ", and "
+ zeros + zeroStr + ".");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句