我在编码时遇到问题,似乎无法找到混乱的地方,甚至找不到错误的结果。
首先,让我解释一下任务。
关于“易经六卦符号”。
左边的是原始的,右边的是我的代码应该给我的结果。
基本上每个“六边形”都包含6条可以撤消或撤消的行。
所以总共有
2 ^ 6 = 64个可能的“六边形”
任务是计算并编码方法以打印所有可能的组合。
那就是我到目前为止:
public class test {
public String toBin (int zahl) {
if(zahl ==0) return "0";
if (zahl ==1 ) return "1";
return ""+(toBin( zahl/2)+(zahl%2));
}
public void show (String s) {
for (char c : s.toCharArray()){
if (c == '1'){
System.out.println("--- ---");
}
if(c=='0'){
System.out.println("-------");
}
}
}
public void ausgeben (){
for(int i = 0 ; i < 64; i++) {
show (toBin(i));
}
}
}
问题是,当我用“ 10”测试“ show”方法时,得到的是3行而不是预期的2行。
public class runner {
public static void main(String[] args){
test a = new test();
a.ausgeben();
a.show("10");
}
}
我遇到的另一个问题是,由于我要转换为二进制,所以我有时行数不足,因为例如二进制中的10为0001010,但是缺少第一个“ 0”。我如何在不做太大改动的情况下轻松实现它们?
我对这一切还是很陌生的,所以如果我没有足够的解释或犯任何错误,请随时告诉我。
最佳答案
嗯,有很多方法可以用零填充字符串,或者创建已经用零填充的二进制字符串。
例如,您可以执行以下操作:
public String padToSix( String binStr ) {
return "000000".substring( 0, 5 - binStr.length() ) + binStr;
}
这将检查您的字符串有多长,并且需要使用多个零来将其填充为
"000000"
字符串中的最多六个。或者,您可以简单地将转换方法(这是递归的,并且实际上不是必需的)替换为专用于六位数字的转换方法:
public static String toBin (int zahl) {
char[] digits = { '0','0','0','0','0','0' };
int currDigitIndex = 5;
while ( currDigitIndex >= 0 && zahl > 0 ) {
digits[currDigitIndex] += (zahl % 2);
currDigitIndex--;
zahl /= 2;
}
return new String(digits);
}
此代码从右到左修改了字符数组(最初只有零)。它将当前位的值添加到给定位置的字符。
'0' + 0
是'0'
,'0' + 1
是'1'
。因为您事先知道自己有六位数,所以您可以从右边开始,再到左边。如果您的电话号码只有四个数字,那么我们尚未触摸的两个数字将是'0'
,因为这是字符数组的初始化方式。确实有很多方法可以实现相同的目的。
关于java - 打印出《易经》卦图符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28355189/