6

こんにちは、私は Java の世界に不慣れで、自分のコードに行き詰まっています。

このコードのブール値に問題があります/

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;
    }        
  }
}

問題は、それがtrueを返し続ける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

少なくとも 2 つの大きな問題と 1 つの小さな問題があります。

  1. あなたのコードは、バイナリ文字列のゼロの数をハードコーディングしています。次に、それを解析しようとすると、理由もなくこれらすべての余分なゼロがあります。
  2. これは、同じVariables[]配列を再利用し続けるすべての true を作成するものである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);

を出力しようとしているからですbooleantrue4文字ありますが、false5文字あります:)

年:

なぜだめですか

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 に答える