Java中的二进制搜索,智囊团游戏

Java中的二进制搜索,智囊团游戏,java,arrays,binary-search,Java,Arrays,Binary Search,现在,对于一个Java课程,我正在尝试构建一个像智囊团一样的游戏。在这个游戏中,会生成一个4位数的随机数,用户会尝试猜测这个数字。在每次猜测中,计算机都会说明有多少正确的数字顺序正确,有多少正确的数字顺序错误 出于某种原因,在我对这个程序进行二进制搜索之前,一切都正常工作,这是这个程序的核心。我花了好几个小时来调整它,但还是弄不到。有什么想法吗 在这个例子中,我试图猜测9935,我意识到这不是一个随机数 非常感谢 编辑:当我运行这个程序,并使用猜测“9875”,它没有给我正确的结果 我需要找到的

现在,对于一个Java课程,我正在尝试构建一个像智囊团一样的游戏。在这个游戏中,会生成一个4位数的随机数,用户会尝试猜测这个数字。在每次猜测中,计算机都会说明有多少正确的数字顺序正确,有多少正确的数字顺序错误

出于某种原因,在我对这个程序进行二进制搜索之前,一切都正常工作,这是这个程序的核心。我花了好几个小时来调整它,但还是弄不到。有什么想法吗

在这个例子中,我试图猜测9935,我意识到这不是一个随机数

非常感谢

编辑:当我运行这个程序,并使用猜测“9875”,它没有给我正确的结果

我需要找到的猜测和结果是:

请输入四位数字:9874

正确但位置错误的位数:0

正确位置的正确位数:1

请输入四位数字:9899

正确但位置错误的位数:1

正确位置的正确位数:1

请输入四位数字:9593

正确但位置错误的位数:3

正确位置的正确位数:1

请输入四位数字:9935

正确但位置错误的位数:0

正确位置的正确位数:4

你说得对

公共类策划人{
公共静态void main(字符串[]args){
Random randomGenerator=新的Random();
扫描仪输入=新扫描仪(System.in);
int随机数=9935;
int[]随机数组=新的int[4];
int temp=随机数;
对于(int i=3;i>=0;i--){
int n=温度%10;
随机数组[i]=n;
温度/=10;
}
布尔值=false;
while(find==false){
System.out.print(Arrays.toString(randomArray));
int[]猜测数组=新的int[4];
System.out.print(“请输入四位数字:”);
int guessTemp=input.nextInt();
对于(int i=3;i>=0;i--){
int n=猜测温度%10;
数组[i]=n;
温度/=10;
}
if(Arrays.equals(randomArray,guessArray)){
System.out.println(“你是对的!”);
发现=真;
}否则{
int numberRightRight=0;
int numberrightError=0;
int indexFound=0;
for(int i=0;i=0){
如果(indexFound==i){
numberRightRight++;
}否则{
numberRightError++;
}
}
}
System.out.println(“正确的位数,但在错误的位置:“+numberRightError”);
System.out.println(“正确位置的正确位数:“+numberRightRight”);
}   
}
}

如果您不需要使用
数组。binarySearch(int[],int)
您可以对未排序的数组使用自己的简单查找方法:

public static int findInArray(int[] array, int value) {
  for (int i = 0; i < array.length; i++) {
    if (array[i] == value) {
        return i;
    }
  }
  return -1;
}
公共静态int findInArray(int[]数组,int值){
for(int i=0;i

现在不再调用
Arrays.binarySearch(guessArray,randomArray[i]);
只需调用
findInArray(guessArray,randomArray[i])

您能更具体地说明您的问题吗?我的第一个猜测是主阵列没有运行它,它可以正常工作。请更具体地说明您遇到的问题having@SimonAndr埃弗斯伯格-请检查编辑内容。@MadProgrammer-它不应该被排序,它应该是随机生成的4位数字t integer。这就是为什么我要寻找
索引的原因。它的效果好得多。为什么呢?难道
二进制搜索不应该是最好的方法吗?而且,我看到的唯一问题是在第一次搜索中,使用
9874
作为我的
猜测数组
。我应该得到
0错,1对
,但我却得到了
1错,1对
。有什么想法吗?或者使用一个已经支持
indexOf
操作的结构:或者是
List
或者是一个字符串。实际上,字符串在这里很有意义,因为数字只是标记,而不是有意义的数字。@KeyferMathewson:有多个逗号nts解释了为什么不正确地使用
binarySearch
。@Dimitri,你是对的,但我想尽可能少地更改他的程序possible@Dmitri由于这是一门入门课,我们实际上还没有学习过
List
,所以我不知道如何使用它。
public static int findInArray(int[] array, int value) {
  for (int i = 0; i < array.length; i++) {
    if (array[i] == value) {
        return i;
    }
  }
  return -1;
}