坚持布尔总是返回TRUE

时间:2012-11-28 14:07:38

标签: java boolean chars

你好,我是java世界的新手,我坚持使用我的代码,这将是一个非常好的litle help

我在这段代码中遇到了一个问题/

public class Variables {
  boolean bit;
  String name;
  public Variables(int b, String name){
    this.name = name;
    bit = test(b);
  }
  public boolean test(int b) {
    System.out.println(b);
    if(b==49) {
        return true;
    }
    if(b==48) {
        return false;
    }
    else {
        return false;
    }        
  }
}

问题在于它保持返回的b的数量是多少 实际上我试图获得一个数字1或0的女巫在一个字符和变换中的布尔t / f

提前致谢

更多代码

public class truthtable2 {
  public ArrayList <Variables[]>bits  = new ArrayList<>();

  public truthtable2 (ArrayList <String> inputs){       
    String [] inputsTab = inputs.toArray(new String[inputs.size()]);
    Variables[] bittab = new Variables[inputsTab.length];
    int total = (int) (Math.pow(2,inputs.size()))-1;
    String tab[]=new String[total+1];
    for(int i =0;i<=total;i++){
      tab[i]=(String.format("%16s", Integer.toBinaryString(i)).replace(' ', '0'));      
    }
    for(int i = 0;i<tab.length;i++){
      char[] chars = tab[i].toCharArray();

      for(int x = 0;x<inputs.size();x++){
        int d = 15-x;
        bittab[x]= new Variables(chars[d], inputsTab[x]);           
      }
      bits.add(bittab);  
    }
    for(Variables[] d: bits){
      for(int f = 0;f<d.length;f++){
        System.out.format("%4s %4s \n",d[f].bit,d[f].name);
      }
    }
  }
}

修改

'0' -->A false
'0' -->B false
'0' -->Cin false
'1' -->A true
'0' -->B false
'0' -->Cin false
'0' -->A false
'1' -->B true
'0' -->Cin false
'1' -->A true
'1' -->B true
'0' -->Cin false
'0' -->A false
'0' -->B false
'1' -->Cin true
'1' -->A true
'0' -->B false
'1' -->Cin true
'0' -->A false
'1' -->B true
'1' -->Cin true
'1' -->A true
'1' -->B true
'1' -->Cin true

编辑2

执行

for(Variables[] d: bits){
          for(int f = 0;f<d.length;f++){
            System.out.format("%4s %4s \n",d[f].bit,d[f].name);

我有这个结果

true    A 
true    B 
true  Cin 
true    A 
true    B 
true  Cin 
true    A 
true    B 
true  Cin 
true    A 
true    B 
true  Cin 
true    A 
true    B 
true  Cin 
true    A 
true    B 
true  Cin 
true    A 
true    B 
true  Cin 
true    A 
true    B 
true  Cin 

3 个答案:

答案 0 :(得分:3)

据我所知,您的代码没有任何问题。你是如何测试bit的价值的?我们能看到实例化Variables并调用test()方法的包装代码吗?

答案 1 :(得分:2)

您至少有两个主要问题和一个小问题。

  1. 您的代码硬编码二进制字符串中的零个数。然后,当你尝试解析它时,你无缘无故地拥有所有这些额外的零。
  2. 这是使所有真实的人你不断重复使用相同的Variables[]数组bittab,所以每次被覆盖。你需要生成一个新的。
  3. 您的test功能过于复杂。我在下面的代码中修复了它。
  4. 这是固定代码:

    public class truthtable2 {
      public ArrayList<Variables[]> bits  = new ArrayList<>();
    
      public truthtable2(ArrayList <String> inputs){       
        String [] inputsTab = inputs.toArray(new String[inputs.size()]);
        int total = (int) (Math.pow(2,inputs.size()))-1;
        String tab[]=new String[total+1];
        for(int i =0;i<=total;i++){
          // changed the below line
          tab[i]=(String.format("%"+inputs.size()+"s", Integer.toBinaryString(i)).replace(' ', '0'));
          System.out.println(tab[i]);
        }
        for(int i = 0;i<tab.length;i++){
          char[] chars = tab[i].toCharArray();
    
          Variables[] bittab = new Variables[inputsTab.length]; // Moved this here
          for(int x = 0;x<inputs.size();x++){
            // Changed this to use variable size
            int d = inputs.size()-x-1;
            bittab[x]= new Variables(chars[d], inputsTab[x]);           
          }
          bits.add(bittab);  
        }
        for(Variables[] d: bits){
          for(int f = 0;f<d.length;f++){
            System.out.format("%4s %4s \n",d[f].bit,d[f].name);
          }
        }
      }
    
      public class Variables {
        boolean bit;
        String name;
        public Variables(int b, String name){
          this.name = name;
          bit = test(b);
        }
        // Totally rewrote function
        public boolean test(int b) {
          System.out.println(b);
          return b==49;
        }
      }
    }
    

答案 2 :(得分:1)

修改

更改

System.out.format("%4s %4s \n",d[f].bit,d[f].name);

System.out.format("%5s %4s \n",d[f].bit,d[f].name);

因为您正在尝试输出booleantrue有4个字符,但false有5个字符:)

<强> OLD:

为什么不

public boolean testChar(char c) {
    return c == '1';
}

public boolean testInt(int c) {
    return c == 49;
}

修改

Variable类中添加此代码。

@Override
public String toString() {
    return name + " " + bit;
}

然后插入以下代码 bittab[x]= new Variables(chars[d], inputsTab[x]);

System.out.println("'" + chars[d] + "' --> " + bittab[x].toString());

并向我们显示输出。