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

Similar program in java and c++ different output

本文关键字:c++ 输出 java 程序      更新时间:2023-10-16

我创建了一个程序来模拟一个谜题。其中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 

注:在第三次迭代中,开关2的状态发生了变化,因为它有电源输入。

我的代码在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");
    }
}

这可能是

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

&&是一个逻辑比较,因此如果powerstate[0][j]true,则此代码返回true。你可能想在这里使用位运算符&

这里:

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