我在编码时遇到问题,似乎无法找到混乱的地方,甚至找不到错误的结果。

首先,让我解释一下任务。
关于“易经六卦符号”。
左边的是原始的,右边的是我的代码应该给我的结果。

基本上每个“六边形”都包含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/

10-10 06:11