类似的程序在java和c ++中输出不同

时间:2014-04-14 21:02:43

标签: java c++

我创建了一个模拟拼图的程序。 其中n个开关串联连接(第一个开关的输出连接到第二个输入)。 第一个开关总是有输入电源,最初所有开关都处于关闭状态。 对于每次迭代,如果开关具有输入功率,则切换状态。 如果开关具有输入功率并且其状态为开,则产生输出。 最后有灯泡,我们必须找到它是否发光给定的迭代次数。 我在数学上做了这个,这次我试图刺激。

考虑2个开关的情况

power    Switch1  power   Switch2  power   Bulb
ON         OFF     OFF     OFF     OFF     OFF
ON         ON      ON      OFF     OFF     OFF
ON         OFF     OFF     ON      OFF     OFF
ON         ON      ON      ON      ON      ON 

注意:在第三次迭代状态下,switch2因电源输入而发生了变化。

我的代码在java中给出了正确的输出但在c ++中是错误的 这里是c ++代码

#include<iostream>

using namespace std;

int main(){
        int n=2;
        int taps=4;
        bool ans=false;
        bool state[n][taps];//={0};//=new boolean[n][taps];
        bool out[n][taps];//={0};//=new boolean[n][taps];
        bool power=true;
        for(int j=0;j<taps;j++){
            for(int i=0;i<n;i++){
                state[i][j]=false;
                out[i][j]=false;
            }
        }

        for(int j=0;j<taps;j++){
            for(int i=0;i<n-1;i++){
                if(j>0)
                    state[0][j] = !state[0][j-1];

                out[0][j]=(power && state[0][j]);

                if(j>0){    
                    if (out[i][j]==true){
                        if (out[i][j-1]==false)
                            state[i+1][j]=state[i+1][j-1];
                        else
                            state[i+1][j]= !state[i+1][j-1];
                    }else if(out[i][j]==false){
                        if(out[i][j-1]==true)
                            state[i+1][j]= !state[i+1][j-1];
                        else
                            state[i+1][j] = state[i+1][j-1];
                    }   
                }else
                    state[i+1][j]=false;
                out[i+1][j]= (state[i+1][j] && out[i][j]);
                ans=out[i+1][j];
            }
            cout<<ans<<endl;    
        }
        if(ans == true)
            cout<<"ON"<<endl;
        else
            cout<<"OFF"<<endl;

}

这是java代码

public class turn {
    public static void main(String args[]){
        int n=2;
        int taps=4;
        boolean ans=false;
        boolean state[][]=new boolean[n][taps];
        boolean out[][]=new boolean[n][taps];
        boolean power=true;
        for(int j=0;j<taps;j++){
            for(int i=0;i<n-1;i++){
                if(j>0)
                    state[0][j] = !state[0][j-1];

                out[0][j]=power & state[0][j];

                if(j>0){    
                    if (out[i][j]==true){
                        if (out[i][j-1]==false)
                            state[i+1][j]=state[i+1][j-1];
                        else
                            state[i+1][j]= !state[i+1][j-1];
                    }else if(out[i][j]==false){
                        if(out[i][j-1]==true)
                            state[i+1][j]= !state[i+1][j-1];
                        else
                            state[i+1][j] = state[i+1][j-1];
                    }   
                }else
                    state[i+1][j]=false;
                out[i+1][j]=state[i+1][j] & out[i][j];
                ans=out[i+1][j];
            }
            System.out.println(ans);

        }
        if(ans == true)
            System.out.println("ON");
        else
            System.out.println("OFF");
    }
}

1 个答案:

答案 0 :(得分:1)

这可能是其中之一

out[0][j]=(power && state[0][j]);

&&是一种逻辑比较,因此如果powerstate[0][j]true,则此代码返回true。您可能希望在此处使用按位运算符&

在这里:

out[i+1][j]= (state[i+1][j] && out[i][j]);