【问题标题】: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。

标签: java


【解决方案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++;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-10
        • 2017-04-07
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        相关资源
        最近更新 更多