为数组创建构造函数并使用自定义类型填充它

弗兰克·菲乌马拉(Frank Fiumara)

我需要使用位模拟一个长字,其中数组中的每个索引都包含一个位。
然后,将新的长字通过输入传递给比较逻辑。
当我尝试比较两个longword或在i上设置longwords新值时,我得到了bit类型的set(int)方法不适用于参数(bit)
这是我的构造函数:

private bit[] longArr;

    public longword() {
        int i;
        longArr = new bit[32];

        for (i = 0; i < 32; i++) {
            longArr[i] = new bit();
        }
    }

与逻辑

 public longword and(longword other){
        bit[] newLongWord = new bit[32];
        int i,j;
        for (i = 0; i < 32; i++) {
            newLongWord[i] = new bit();
        }
        for (j = 0; j< 32; j++){

            if(longArr[j] == other.longArr[j]){
                newLongWord[0].set(this.longArr[0].and(other.longArr[0]));

            }
            else if((longArr[j] != other.longArr[j])){
                newLongWord[0].set(this.longArr[0].and(other.longArr[0]));
            }
            else{
                newLongWord[0].set(this.longArr[0].and(other.longArr[0]));
            }
        }
        return other;
    }

我只是想在实现正确逻辑之前可以运行代码。编辑:我的位类

public class bit implements IBit {
    private int val; //provides class access to bit values

    public bit() {
        val = 0; //declare an initial bit value of 0
    }

    public void set(int val1) {
        if (val >= 0 && val <= 1) { //make sure the bit is in bounds of 0-1
            val = val1;
        }

        else {
            System.out.println("Bit can only be 0 or 1"); //throw error when bit isnt 0 or 1
        }

    }

    public void toggle() {
        if (val == 0) {
            val = 1;
        }//switch bit value with opposite i.e 0 to 1
          
        else{
            val = 0;
        }

    }

    public void set() {
        val = 1; //sets default bit to 1 without parameter
    }

    public void clear() {
        val = 0; //sets bit to 0
    }

    public int getValue() {
        return val; //gets bit value
    }

    public bit and(bit two) {
        bit finished = new bit(); //new bit instance for first bit

        if (val == 0) {
            finished.set(0); //sees if bit1 is set to 0 for and logic
        }

        else {

            if (two.getValue() == 0) {

                finished.set(0);//sees if bit2 is set to 0
            }

            else {

                finished.set(1); //otherwise performs and on both bits creating a 1
            }

        }

        return finished;

    }

    public bit or(bit two) {
        bit finished = new bit(); //instance of bit
        if (val == 1){
            finished.set(1);
        } //if the first bit is 1, sets 1 return bit as 1
  
        else {
            if (finished.getValue() == 1) //if first bit is not 1 but new instance is 1, set return bit = 1
                finished.set(1);
            else
                finished.set(0);//else return bit = 0
        }

        return finished;
    }

    public bit xor(bit two) {
        bit finished = new bit(); //instance of bit
        if (val == 1) {
            if (two.getValue() == 0){//if second bit = 0, return bit is 1
                finished.set(1);
            }
            else{
                finished.set(0);//else return bit = 0
            }
        } 
        else {
            if (two.getValue() == 1){//If second bit =1 , return bit = 1
                finished.set(1);
            }
 
            else{
                finished.set(0);//else return bit = 0
            }
                
        }

        return finished;
    }

    public bit not() {

        if (val == 0) {//reversal of bit
            set(1);
        }

        else {
            set(0);
        }
        return this; // Returns the opposite of original bit val
    }

    public String toString() {
        String finalVal = Integer.toString(val);
        return finalVal;
    }
}
约翰尼·莫普(Johnny Mopp)

错误消息总结起来:and()返回一个,bit但是set()期望一个int创建一个具有以下set功能的函数bit

public void set(bit other) { set(other.val); }

同样,longword.and()可以简化逻辑

public longword and(longword other) {
    longword newLongWord = new longword();
    for (int j = 0; j < longArr.length; j++) {
        newLongWord.longArr[j].set(longArr[j].and(other.longArr[j]));
    }
    return newLongWord;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章