为什么我的循环方法不起作用?

时间:2018-01-13 01:05:39

标签: java loops

这对许多人来说可能是一个简单的问题,但我不能为我的生活找出我的代码有什么问题。

我应该返回n(最大1000000)下同时包含7和9的数字。例如,n = 10返回0,n = 100返回2(从79和97)等。

int allWith7Or9(int n) 
{
  int count = 0;
  for(int i = 0; i < n; i++)
  {
    if(i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7)
    {
      if(i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9)
      {
        count++;
      }
    }
  }
  return count;
}

我意识到我本来可以使用&amp;&amp;和我试过,但是我的代码不断提出0,我不知道为什么。我至少以3种不同的方式实现了这一点。

编辑:

我也试过这个:

int allWith7Or9(int n) 
{
  int count = 0;
  for(int i = 0; i < n; i++)
  {
    if((i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7
    || i%1000000==7) && (i%10==9 || i%100==9 || i%1000==9
    || i%10000==9 || i%100000==9 || i%1000000==9))
    {
      count++;
    }
  }
  return count;
}

3 个答案:

答案 0 :(得分:1)

if(i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7)
{
  if(i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9)
  {
    count++;
  }
}

基本上是

if(cond1)
{
  if(cond2)
  {
    count++;
  }
}

基本上是:

if(cond1 && cond2)
{
  count++;
}

因为两个条件必须为true才能递增count

这些条件同时并非如此,因为

i % 100 == 7

不是你可能意味着什么。这不是要检查70,71等数字,它会检查数字除以100时的余数为7,如7,107,207。所以

i%10==7 || i%100==7 || i%1000==7 || i%10000==7 || i%100000==7 || i%1000000==7

仅在i == 7

时匹配
i%10==9 || i%100==9 || i%1000==9 || i%10000==9 || i%100000==9 || i%1000000==9

仅在i == 9时匹配。 7 != 9,因此计数器不会增加。

您可以将条件重写为:

i%10==7 || (i/10)%10==7 || (i/100)%10==7 etc

但是像这样写出来的东西很混乱且容易出错。

相反,请使用循环:

boolean found7 = false;
boolean found9 = false;
for (int ii = i; ii > 0: ii /= 10)  {
  switch (ii % 10) {
    case 7: found7 = true; break;
    case 9: found9 = true; break;
  }
}

if (found7 && found9) {
  count++;
}

这使用两个标志来指示您找到的数字。检查最后一位数字是否为7或9,然后除以10以丢弃该数字并继续前进到下一位。

答案 1 :(得分:1)

好的,第一个条件错了。例如79。 7的条件不起作用79%10 = 9,79%100 = 79.未检测到7个。 它应该像遍历数字的所有数字一样。所以检查一个号码可以是这样的。

boolean have7and9(int a) {
  boolean seven = false, nine = false;  
  while(a > 0) {
    if (a%10 == 7) seven = true;
    if (a%10 == 9) nine = true;
    a /= 10;
  }
  return seven && nine;
}

答案 2 :(得分:0)

根本问题是你的情况不对。

例如,i % 100 == 7不会测试i的“十位”数字是否为7实际测试最后两位是07。算一算......

要在单个表达式中测试“十位”数字为7,您需要使用类似

的内容
(i / 10) % 10 == 7

(你应该能够从上面找到一个正确的解决方案。你可以采取至少两种不同的方法。)