你好,我是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
答案 0 :(得分:3)
据我所知,您的代码没有任何问题。你是如何测试bit
的价值的?我们能看到实例化Variables
并调用test()
方法的包装代码吗?
答案 1 :(得分:2)
您至少有两个主要问题和一个小问题。
Variables[]
数组bittab
,所以每次被覆盖。你需要生成一个新的。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;
}
}
}
答案 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);
因为您正在尝试输出boolean
。 true
有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());
并向我们显示输出。