我试图创建一个猜谜游戏,从用户的输入。我的问题是,当用户猜错时,必须显示二进制数的正确数字,以此类推。
但是,我对输出的顺序和长度有问题。
我需要的是:
生成的随机值:11
要猜测的二进制数: 1011
显示给用户: ----
第一次猜错后显示: ---1
第二次错误猜测后显示: --11
第三次错误猜测后显示: -011
第四次错误猜测后显示: 1011
我得到的是:
生成的随机值:11
要猜测的二进制数: 1011
显示给用户: -------
第一次猜错后显示: ------0
第二次错误猜测后显示: -----00
第三次错误猜测后显示: ----000
第四次错误猜测后显示: ---0000
第五次错误猜测后显示: --10000
第六次猜错后显示: -010000
错误猜测后显示: 1010000
我的代码:
Scanner scan = new Scanner(System.in);
// Generating a random number between 1-16
int randomNum = (int) (Math.random() * 16 + 1);
int original = randomNum;
System.out.println("Random num generated: " + randomNum);
// Converting the random number to a binary number
System.out.print("Random number in binary: ");
int[] binary = new int[8];
int originalBinary = 0;
int index = 0;
int count = 0;
while (randomNum > 0) {
binary[index++] = randomNum % 2;
randomNum /= 2;
}
for (int i = index - 1; i >= 0; i--) {
count++;
System.out.print(binary[i]);
originalBinary = binary[i];
}
System.out.println("\n***********************************");
// System.out.print("\nPlease enter a guess: ");
int guess = scan.nextInt();
int digitsToReveal = 0;
while (guess != original && digitsToReveal != binary.length) {
System.out.print("\nPlease enter another number: ");
guess = scan.nextInt();
System.out.println(reveal(binary, digitsToReveal++));
}
}
public static String reveal(int[] arr, int reveal) {
StringBuilder str = new StringBuilder();
for (int i = 1; i < arr.length; i++) {
if (i >= arr.length - reveal) {
str.append(arr[i]);
} else {
str.append("-");
}
}
return str.toString();
}
}
2条答案
按热度按时间krcsximq1#
请注意,您的
binary
数组按与打印顺序相反的顺序存储整数的位。也就是说,binary[0]
是最重要的位。例如,对于数字13(二进制1101),数组如下所示:打印整数的二进制版本时,可以正确地反向读取数组:
所以在
reveal
,也应反向读取数组:而不是
i
,您应该访问arr.length - i - 1
.另外,请注意,长度为5的数组可以充分存储从1到16的数字,您不需要使用长度为8的数组。
我不知道这是不是有意的,但你没有透露最重要的一点。
5jvtdoz22#
因为你是按相反的顺序存储二进制数的
binary
数组变量编号:
11
二元的:1011
数组:[1, 1, 0, 1, 0, 0, 0, 0]
我通过将它存储到二进制数组的第一个元素来解决这个问题index
变量7
以及index--
在while循环中。然后我编辑digitToReveals = 1
然后移动reveal
将方法调用到while循环中的第一行,这将显示自第一次错误猜测以来的数字。我还调整了其他一些东西(未使用的变量、消息交互等等)。如果我没有误解的话,你每轮给一个玩家8次机会去猜。