为啥程序跳过while循环
Posted
技术标签:
【中文标题】为啥程序跳过while循环【英文标题】:why the program is skipping while loop为什么程序跳过while循环 【发布时间】:2011-09-08 16:26:34 【问题描述】:为什么我的程序会跳过 while 循环?
class DigitRepeat
public static void main(String args[])
int n=133,dig=3,digit,count=0;
while(n!=0)
digit=n%10;
if(dig==digit)
count=count++;
n=n/10;
if(count==0)
System.out.println("digit not found");
else
System.out.println("digit occurs "+count+" times.");
【问题讨论】:
现在是使用调试器自己解决问题的好时机。我怀疑while循环正在执行,问题不是你想的那样。 那么你的问题是什么?如果你在问题中添加了这个程序的输出和你想要的输出,你可能会在这里得到更好的帮助。 你的结果是什么? - “找不到数字”? 我不确定这是否能解决你的问题,但count++;
就足够了,你不必写count=count++;
。
事实上 count = count++;
是罪魁祸首,因为在这种情况下 count 始终保持为 0。
【参考方案1】:
> count=count++;
应该是
> count++;
解释:
> count=count++;
是 a_temp_var=count;
count=count+1;
count=a_temp_var;
等于:a_temp_var=count;
count=a_temp_var;
等于什么都不做。
【讨论】:
解释一下:count++
是一个后增量。它首先将 count 的值分配给左侧,然后递增。另一方面,您有预增量++count
,它是相反的。所以你/可以/写count = ++count
,但这不是很好的风格。
没错,但这不是他的问题。他进入循环的条件是假的,所以它永远不会进入。(但他也需要改变 count++
@Jason,它确实进入了循环。【参考方案2】:
您的代码中有一点错误:
count = count++;
应该改为:
count++;
查看here 的运行示例,我所做的只是删除分配。
(包括在内是为了完整性)
int n = 133;
int dig = 3;
int digit;
int count = 0;
while (n != 0)
digit = n % 10;
if (dig == digit)
count++;
n = n / 10;
if(count = =0)
System.out.println("digit not found");
else
System.out.println("digit occurs " + count + " times.");
【讨论】:
为什么不在您的回复中发布更改的来源? @Andrew 因为我猜这是一篇相当长的文章。如果您愿意,可以编辑我的答案。 Long?!? 连滚动条都不破解!你想看长,看看我的File Manager questions线程。 ;) @Andrew:你为什么不直接创建一个谷歌代码项目,哈哈。 (我的答案中还包含了源代码 :-) 有人还建议用它制作一个 SourceForge 项目。英雄所见略同。 ;)【参考方案3】:这有点像你想用 C# 编写的代码:
class Program
static void Main(string[] args)
var number = 12289;
var search = 2;
var count = Search(number, search);
static int Search(int number, int search)
return number < 10 ?
(number == search ? 1 : 0) :
(number % 10 == search ? 1 : 0)
+ Search((int)Math.Floor(number / (double)10), search);
【讨论】:
【参考方案4】:第一个建议:当您认为您的程序正在跳过循环时,在 while 之后添加一个 print 将帮助您缩小问题范围。
那么你必须小心后增量。将值 countRight 分配给 countLeft 然后增加 countLeft 但这并不重要,因为 count 的值已经设置。 count 的值被复制,因此当 ++ 对不同的计数生效时(对不起,如果这不是很清楚)。
你可以使用:
计数++;
计数 = 计数 +1;
计数 += 1;
或计数 = ++计数;
最后一个预增量有效,因为该值在被复制之前递增^^
(请阅读此内容,因为它总是出现在采访中^^
【讨论】:
【参考方案5】:如果我查看 IDE 中的代码,它会发出警告
从不使用在
count++
更改的值。
即它警告我计算的值已被丢弃。
如果我在调试器中单步执行代码,我可以看到循环已执行,但行
count = count++;
不会改变count
。
你想要一个
count++;
count+=1;
count=count+1;
【讨论】:
+1 提供真正的解释,包括提及编译器/IDE 警告和使用调试器。谁在乎最快的答案是什么? 一旦你知道答案,这些事情很容易,但当你不知道时,我会问自己;我应该怎么解决这个问题?希望 OP 会知道如何解决这个问题并且很多人会喜欢它。 ;) 什么是优秀的IDE?请告诉我们?好久没用IDE了.. 流行的IDE有很多; Eclipse、Netbeans 和我最喜欢的 IntelliJ CE(全部免费)【参考方案6】:我不知道程序跳过某些内容是什么意思。
但我想我可以看到你的错误。是这里:
count=count++;
++
运算符在假设后递增计数,因此变量 count
永远保持为 0。
我想你想说count++;
【讨论】:
以上是关于为啥程序跳过while循环的主要内容,如果未能解决你的问题,请参考以下文章
像 while 循环一样,我怎样才能跳过 for 循环中的一个步骤?