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