打印易经卦象
Print out Yijing Hexagram Symbols
我在编码时遇到了问题,我似乎无法找到我搞砸的地方,甚至找不到我得到错误结果的原因。
首先,让我解释一下任务。
是关于《易经卦象》的。
左边的是原始的,右边的是我的代码应该给我的结果。
基本上每个“六卦”都有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”。我怎样才能在不做太多改变的情况下以简单的方式实现它们?
我对这一切还很陌生,所以如果我没有解释清楚或犯了任何错误,请随时告诉我。
您的问题简化为打印所有长度为 6 的二进制字符串。我会使用以下代码片段:
String format = "%06d";
for(int i = 0; i < 64; i++)
{
show(String.format(format, Integer.valueOf(Integer.toBinaryString(i))));
System.out.println();
}
如果您不想打印前导零,请将 String.format(..)
替换为 Integer.toBinaryString(i)
。
如果您使用 Integer.toBinaryString
method combined with the String.format
and String.replace
方法,您可能会发现它更容易。
String binary = String.format("%6s", Integer.toBinaryString(zahl)).replace(' ', '0');
这会将数字转换为二进制,将其格式化为六个空格宽的字段(必要时使用前导空格),然后将空格替换为 '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'
,因为字符数组就是这样初始化的。
确实有很多方法可以实现同样的事情。
我在编码时遇到了问题,我似乎无法找到我搞砸的地方,甚至找不到我得到错误结果的原因。
首先,让我解释一下任务。
是关于《易经卦象》的。
左边的是原始的,右边的是我的代码应该给我的结果。
所以一共有
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”。我怎样才能在不做太多改变的情况下以简单的方式实现它们?
我对这一切还很陌生,所以如果我没有解释清楚或犯了任何错误,请随时告诉我。
您的问题简化为打印所有长度为 6 的二进制字符串。我会使用以下代码片段:
String format = "%06d";
for(int i = 0; i < 64; i++)
{
show(String.format(format, Integer.valueOf(Integer.toBinaryString(i))));
System.out.println();
}
如果您不想打印前导零,请将 String.format(..)
替换为 Integer.toBinaryString(i)
。
如果您使用 Integer.toBinaryString
method combined with the String.format
and String.replace
方法,您可能会发现它更容易。
String binary = String.format("%6s", Integer.toBinaryString(zahl)).replace(' ', '0');
这会将数字转换为二进制,将其格式化为六个空格宽的字段(必要时使用前导空格),然后将空格替换为 '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'
,因为字符数组就是这样初始化的。
确实有很多方法可以实现同样的事情。