6

你好,我是 Java 世界的新手,我卡在我的代码中,这将是一个非常好的帮助 p

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

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 
4

3 回答 3

3

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

于 2012-11-28T14:13:53.837 回答
2

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

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

这是固定代码:

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;
    }
  }
}
于 2012-11-28T14:59:14.843 回答
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);

因为你试图输出一个boolean. true有 4 个字符,但false有 5 个 :)

老的:

为什么不

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());

并向我们​​展示输出。

于 2012-11-28T14:14:46.850 回答