2

这对你来说很容易。我正忙于使用 c++ 进行测试。我有 2 个值:

0 and 1

我可以找到之间的随机数。现在我想在他们之间交替。如果我在第一步中得到“1”,那么在第二步中我想得到“0”,在第三步中再次得到“1”,它会交替出现

step1 = 1
step2 = 0
step3 = 1
step4 = 0

我尝试了递增和递减

  int value;
  if(value == 0)
  {   
      value = value + 1;
  }
  else if(value == 1)
  {
      value = value -1;
  }

此代码不起作用。如果它看到 0,它将变为 1,但下一步该值将再次变为 1。

4

6 回答 6

3

如果你真的只需要 0 和 1:

unsigned int value = 0;

while (1) {
   value = (value + 1) & 1;
   // do whatever is needed with value;
}

这是有效的,因为在二进制 0 + 1 = 1 和 1 + 1 = 10 中。'& 1' 部分告诉我们总是取最后一位。

于 2012-08-23T17:39:21.913 回答
1

疯狂猜测:您正在使用浮点类型(doublefloat)来表示这些数字。您无法使用==运算符比较这些类型,您需要考虑它们的精度。

看看这个关于如何比较浮点类型的问题。

于 2012-08-23T17:33:17.200 回答
1

用你的 if 语句放入一个 bool 开关,例如

bool firstHit = false;
if(value == 0 && firstHit == false)
{   
  value = value + 1;
  firstHit = true;
}
else if(value == 1 &&firstHit == true)
{
  value = value -1;
  firstHit = false;
}
于 2012-08-23T17:36:16.623 回答
1

你的代码很好,伙计。我测试了它,它的工作原理。

#include <iostream>

using namespace std;

int main ()
{

    int value=1; //Say first step

  for (int i=0 ; i <= 10; i++ )
{
    if(value==0)
    {
        value=value+1;
    }
    else if (value==1)
    {
        value=value-1;
    }
         cout << "Step "<<i<<": "<<value<<"\n";
}

  return 0;
}
于 2012-08-23T17:40:46.637 回答
1

您显示的代码不会初始化value为任何内容。

除此之外,

if(value == 0)
  {   
      value = value + 1;
  }
  else if(value == 1)
  {
      value = value -1;
  }

如果您只想在 1 和 0 之间交替,这看起来应该可以正常工作,因为每次迭代它时它都会切换它。

于 2012-08-23T17:45:54.793 回答
0

最简单的:

value = 1 - value;

冒号前有一个<g>,但系统软件似乎不想显示它。

于 2012-08-23T19:29:48.200 回答