【发布时间】:2013-10-09 19:52:26
【问题描述】:
我遇到了一个问题。我正在尝试创建一个类,它采用用户输入的最大数字并在它之前添加整数直到它变为 0,但是,当我运行它时,数字会越来越大,直到它崩溃。是什么让它陷入无限循环?
public class Summation {
public static void main(String[] args) {
EasyReader console = new EasyReader();
System.out.print("Debug? (Y/N): ");
char debug = console.readChar();
if ((debug!='Y')&&(debug!='N')){
System.out.println("Please enter Y or N");
main(null);
}
else{
System.out.print("Enter max range:");
int max = console.readInt();
int s = sum(max,debug);
System.out.print(s);
}
}
public static int sum(int m, char d){
int sm = 1;
boolean isRunning = true;
while ((isRunning == true)&&(d=='Y')){
if ((--m)==0) {
isRunning = false;
}
else{
sm = m+(--m);
System.out.println("sm is"+sm);
}
while ((isRunning == true)&&(d=='N')){
if ((--m)==0) {
isRunning = false;
}
else{
sm = m+(--m);
}
}
}return sm;
}
}
【问题讨论】:
-
所以您将两个正整数相加,然后惊讶于结果大于?你真的考虑清楚了吗?这与编程无关,您的代码完美无缺:它完全按照指定的方式运行。这是PEBKAC。
-
@ppeterka66 其中一个整数应该倒计时直到它到达 0,并且该过程应该在那个点终止。
-
次要注意,不要在你的条件下使用
isRunning == true,isRunning就足够了,它可以防止你错误地将布尔值分配给像isRunning = true这样的变量。 -
@Showman - 那么问题是这与斐波那契没有任何联系...这只是 1 和最大值之间的所有数字的总和,我没记错,这可以通过 @987654325 解决@, n 是最大数 - 不需要单个循环。并且错误很可能是 if 语句的评估减少 m,而 else 语句再次减少它......
-
输入 'Y' 和 501 对我来说终止正常。你给它什么输入?另外,嵌套
while的目的是什么?最外层的while只会在 d=='Y' 时输入,所以嵌套循环永远不会做任何事情。
标签: java loops while-loop