为啥程序跳过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循环的主要内容,如果未能解决你的问题,请参考以下文章

For或While循环跳过输入[重复]

为啥while循环不退出?

如果函数内部的条件失败,则跳过 bash while 循环

像 while 循环一样,我怎样才能跳过 for 循环中的一个步骤?

如果处理了错误,while 循环会跳过一个循环。我怎样才能让它在周期的其余部分运行?

为啥我的 while 循环结束了?