【发布时间】:2012-12-03 22:35:59
【问题描述】:
现在,对于 Java 课程,我正在尝试构建一个类似于 Mastermind 的游戏。在这个游戏中,生成一个 4 位随机数,用户尝试猜测该数字。每次猜测时,计算机都会说明有多少正确的数字按正确的顺序排列,有多少正确的数字按错误的顺序排列。
由于某种原因,一切都取决于我对该程序的二进制搜索,这确实是该程序的核心。我花了几个小时来调整它,但我仍然无法得到它。有什么想法吗?
在这个例子中,我试图猜测 9935,但我意识到这不是一个随机数。
非常感谢!
编辑:当我运行这个程序并使用猜测“9875”时,它没有给我正确的结果。
我需要找到的猜测和结果是:
请输入四位数字:9874
正确但位置错误的位数:0
正确位置的正确位数:1
请输入四位数:9899
正确但位置错误的位数:1
正确位置的正确位数:1
请输入四位数字:9593
正确但位置错误的位数:3
正确位置的正确位数:1
请输入四位数:9935
正确但位置错误的位数:0
正确位置的正确位数:4
你是对的!
public class Mastermind {
public static void main(String[] args) {
Random randomGenerator = new Random();
Scanner input = new Scanner(System.in);
int randomNumber = 9935;
int[] randomArray = new int[4];
int temp = randomNumber;
for (int i = 3; i >= 0; i--){
int n = temp%10;
randomArray[i] = n;
temp /= 10;
}
boolean found = false;
while (found == false){
System.out.print(Arrays.toString(randomArray));
int[] guessArray = new int[4];
System.out.print("Please enter a four-digit number: ");
int guessTemp = input.nextInt();
for (int i = 3; i >= 0; i--){
int n = guessTemp%10;
guessArray[i] = n;
guessTemp /= 10;
}
if (Arrays.equals(randomArray, guessArray)){
System.out.println("You are correct!");
found = true;
} else {
int numberRightRight = 0;
int numberRightWrong = 0;
int indexFound = 0;
for(int i = 0; i < guessArray.length; i ++){
System.out.println(randomArray[i]);
indexFound = Arrays.binarySearch(guessArray, randomArray[i]);
System.out.println(indexFound);
if (indexFound >= 0){
if(indexFound == i){
numberRightRight++;
} else {
numberRightWrong++;
}
}
}
System.out.println("The number of correct digits but in the wrong place: " + numberRightWrong);
System.out.println("The number of correct digits in the right place: " + numberRightRight);
}
}
}
【问题讨论】:
-
您能具体说明一下您的问题吗?
-
我的第一个猜测是主数组没有排序
-
我运行了它,它适用于该号码。请更具体地说明您遇到的问题
-
@SimonAndréForsberg- 请检查编辑。
-
@MadProgrammer - 它不应该被排序,它应该是一个随机产生的 4 位整数。这就是为什么我要寻找
indexOf。
标签: java arrays binary-search