为什么程序在循环时跳过

时间:2011-06-05 09:46:41

标签: java

为什么我的程序跳过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.");
  }
}

6 个答案:

答案 0 :(得分:10)

> count=count++;

应该是

> count++;

解释

> count=count++;
a_temp_var=count;
count=count+1;
count=a_temp_var;
等于:
a_temp_var=count;
count=a_temp_var;
等于什么都不做。

答案 1 :(得分:6)

如果我查看IDE中的代码,它会发出警告

  

永远不会使用count++处更改的值。

即。它警告我计算的值被丢弃。

如果我在调试器中单步执行代码,我可以看到循环执行但行

count = count++;

不会更改count

你想要

count++;

count+=1;

count=count+1;

答案 2 :(得分:1)

我不知道你的意思是程序跳过了什么。 但我想我可以看到你的错误。是这里: count=count++;

在假设之后

++运算符增量计数,因此变量count永远保持为0。

我想你想说count++;

答案 3 :(得分:1)

您的代码中有一点错误:

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."); 

答案 4 :(得分:0)

第一个建议:当你认为你的程序正在跳过循环时,在一段时间之后添加一个打印件会帮助你缩小问题的范围。

然后你必须小心后增量。将countRight值赋给countLeft,然后countLeft递增但无关紧要,因为count的值已经设置。因此,当++使用不同的计数生效时,会复制count的值(对不起,如果不是这么清楚的话)。

你可以使用:

计数++;

count = count +1;

计数+ = 1;

或count = ++ count;

最后一个预增量有效,因为该值在被复制之前递增^^

(读到这个因为它总是在采访中出现^^

答案 5 :(得分:0)

以下是您尝试使用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);
    }
}