2012-08-23 40 views
2

這對您很簡單。我忙於使用C++進行測試。我有2個值:使用C++中的整數進行更改

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。

+5

我不關注...... –

+0

你的意思是說有一系列的步驟,第一步如果你得到1,那麼在下一步你得到零,然後再次得到1,依此類推? –

+0

是的,這就是我的意思 –

回答

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'部分告訴我們總是採取最後一點。

+0

什麼是「單位」? – 0x499602D2

+0

@David uint是unsigned int的簡寫形式。這不是一個單位的錯字。 :) – grieve

+0

C++沒有定義類型爲uint。必須是無符號整型? –

1

猜測:您正在使用浮點類型(doublefloat)來表示這些數字。您無法使用==運算符比較這些類型,因此您需要考慮其精度。

請看how to compare floating point types上的這個問題。把

+0

不,我不使用浮動或雙打 –

+1

因此,通過說「我可以找到0和1之間的隨機數」,你的意思是「隨機0或1」? –

+0

我可以用rand()%2做的,我試圖在0和1之間交替。就像我在一步中得到1然後在下一步我得到0並再次下一步1 –

1

在布爾開關,你的if語句,如

bool firstHit = false; 
if(value == 0 && firstHit == false) 
{ 
    value = value + 1; 
    firstHit = true; 
} 
else if(value == 1 &&firstHit == true) 
{ 
    value = value -1; 
    firstHit = false; 
} 
+1

一個額外的,多餘的,變量到底有多幫助? –

+2

我想你錯過了第二部分是** else **的事實。如果僅僅是這樣,意圖就會變得更加清晰。 – chris

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; 
} 
+0

我的錯誤。編輯 –

+0

然後我的編譯器不能正常工作。 –

+0

@JohanDela,你的編譯器是什麼?請注意,這個「值」也被初始化。 – chris

1

您顯示的代碼不會將value初始化爲任何值。

除此之外,

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

這看起來像它應該工作,如果你只想1 & 0之間交替,因爲它會在每次迭代它時打開它。

0

最簡單的:

value = 1 - value; 

有冒號前一個<g>,但系統軟件似乎不想來顯示它。