Java 应返回下标号时未找到返回的线性搜索

Java 应返回下标号时未找到返回的线性搜索,java,arrays,sorting,search,Java,Arrays,Sorting,Search,我正在为Java做一个家庭作业,一个程序应该从用户那里读入10个数字,然后要求搜索一个数字。它对数字进行排序(升序)并在数组上执行线性搜索,然后应该返回找到它的下标,或者返回一条消息说找不到 即使在应该返回下标时,我的代码也会给我“notfound”响应。你能看看我的密码吗?我试着改变我的if语句,但没用。我已经尽可能地使用了本书中的搜索和排序方法示例(请随意指出错误) 这是代码 package program11; import java.util.Scanner; public class

我正在为Java做一个家庭作业,一个程序应该从用户那里读入10个数字,然后要求搜索一个数字。它对数字进行排序(升序)并在数组上执行线性搜索,然后应该返回找到它的下标,或者返回一条消息说找不到

即使在应该返回下标时,我的代码也会给我“notfound”响应。你能看看我的密码吗?我试着改变我的if语句,但没用。我已经尽可能地使用了本书中的搜索和排序方法示例(请随意指出错误)

这是代码

package program11;
import java.util.Scanner;

public class ArraySearch {

    public static void main(String[] args) {
        double[] arrayBuild = new double[10];
        Scanner input = new Scanner(System.in);

        for (int i = 0; i < arrayBuild.length; i++) {
            System.out.print("Enter a number.");
            arrayBuild[i] = input.nextDouble();
        }

        System.out.print("Enter a number to search for ");
        int objective = input.nextInt();

        linearCheck(arrayBuild, objective);

        if ((objective >= 0) && (objective < arrayBuild.length)) {
            System.out.println("Found at index: " + objective);
        } else {
            System.out.println("Not Found");
        }
    }

    public static void arraySort(double[] arrayBuild) {
        for (int i = 1; i < arrayBuild.length; i++) {
            double currentPoint = arrayBuild[i];
            int r;
            for (r = i - 1; r >= 0 && arrayBuild[r] > currentPoint; r--) {
                arrayBuild[r + 1] = arrayBuild[r];
            }
            arrayBuild[r + 1] = currentPoint;
        }
    }

    public static double linearCheck(double[] arrayBuild, int objective) {
        for (int i = 0; i < arrayBuild.length; i++) {
            if (objective == arrayBuild[i])
                return i;
        }
        return -1;
    }

}
package程序11;
导入java.util.Scanner;
公共类数组搜索{
公共静态void main(字符串[]args){
double[]arrayBuild=新的双精度[10];
扫描仪输入=新扫描仪(System.in);
for(int i=0;i=0)和&(目标=0&&arrayBuild[r]>currentPoint;r--){
arrayBuild[r+1]=arrayBuild[r];
}
arrayBuild[r+1]=当前点;
}
}
公共静态双线检查(双[]arrayBuild,int-objective){
for(int i=0;i

编辑-新代码。现在一切都完成了,除了当我输入一个不在数组中的数字时,我得到一个负数。例如,输入10 8 7 6 5 3 5 3 5 3 5 6并搜索11,线性搜索的结果为-1,二进制搜索的结果为-11。我尽可能地采纳了你的建议。我现在错过了什么

package program11;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class ArraySearch {

    public static void main(String[] args) {
        double[] arrayBuild = new double[10];
        Scanner input = new Scanner(System.in);
        int reply = 2;

for (int i = 0; i < arrayBuild.length; i++) {
    System.out.print("Enter a number.");
    arrayBuild[i] = input.nextDouble();
        }
while (reply != 1) {
        System.out.print("Enter a number to search for ");
        double objective = input.nextDouble();

arraySort(arrayBuild);
        double linearResult = linearCheck(arrayBuild, objective);

if (objective >= 0) {
        System.out.println("Linear search found at index: " + linearResult);
                }
else {
        System.out.println("Not Found (linear)");
        }
        double binaryResult = binaryCheck(arrayBuild, objective);

if (objective >= 0) {
System.out.println("Binary search found at index: " + binaryResult);
                }
else {
     System.out.println("Not Found (binary)");
        }
reply = JOptionPane.showConfirmDialog(null, "Continue?"); 
    }
}

public static void arraySort(double[] arrayBuild) {
    for (int i = 1; i < arrayBuild.length; i++) {
        double currentPoint = arrayBuild[i];
        int r;
        for (r = i - 1; r >= 0 && arrayBuild[r] > currentPoint; r--) {
            arrayBuild[r + 1] = arrayBuild[r];
        }
        arrayBuild[r + 1] = currentPoint;
    }
    }

public static double linearCheck(double[] arrayBuild, double objective) {
    for (int i = 0; i < arrayBuild.length; i++) {
        if (objective == arrayBuild[i])
            return i;
    }
return -1;
    }
public static double binaryCheck(double[] arrayBuild, double objective) {
    int low = 0;
    int high = arrayBuild.length - 1;

    while (high >= low) {
        int mid = (low + high) / 2;
        if (objective < arrayBuild[mid])
            high = mid - 1;
        else if (objective == arrayBuild[mid])
            return mid;
        else
        low = mid + 1;
    }
return -low - 1;
    }
}
package程序11;
导入java.util.Scanner;
导入javax.swing.JOptionPane;
公共类数组搜索{
公共静态void main(字符串[]args){
double[]arrayBuild=新的双精度[10];
扫描仪输入=新扫描仪(System.in);
int-reply=2;
for(int i=0;i=0){
System.out.println(“在索引处找到的线性搜索:“+linearResult”);
}
否则{
System.out.println(“未找到(线性)”;
}
双二进制结果=二进制检查(arrayBuild,objective);
如果(目标>=0){
System.out.println(“在索引处找到的二进制搜索:“+binaryResult”);
}
否则{
System.out.println(“未找到(二进制)”;
}
reply=JOptionPane.showConfirmDialog(null,“是否继续?”);
}
}
公共静态void数组排序(双[]数组构建){
for(int i=1;i=0&&arrayBuild[r]>currentPoint;r--){
arrayBuild[r+1]=arrayBuild[r];
}
arrayBuild[r+1]=当前点;
}
}
公共静态双线检查(双[]阵列构建,双目标){
for(int i=0;i=低){
int mid=(低+高)/2;
if(目标
您永远不会保存搜索值。你的目标和结果不一样。下面是我将要进行的代码更改:

    int result = linearCheck(arrayBuild, objective);

    if ((result >= 0) && (result < arrayBuild.length)) {
        System.out.println("Found at index: " + result);
    } else {
        System.out.println("Not Found");
    }
int result=linearCheck(arrayBuild,objective);
如果((结果>=0)和&(结果
此更改需要为线性检查例程返回一个int


这是为了使
objective
成为一个双精度而非整数。

我不确定是什么导致了您的问题,但我发现您的代码存在一些问题

  • 如果您想搜索int,那么我也会使用int类型的
    arrayBuild
    。或者,您可以通过将
    objective
    的类型更改为double并让用户输入double来搜索double

  • 调用
    linearCheck
    时,您没有将结果存储在任何位置,应该将其分配给变量

    double foundLocation = linearCheck(arrayBuild, objective);
    
  • if语句没有多大意义,应该使用
    linearCheck
    的返回值,如下所示

    if (foundLocation >= 0) {
        System.out.println("Found at index: " + foundLocation);
    } else {
        System.out.println("Not Found");
    }
    
  • 您没有在主目录中的任何位置调用
    arraySort


  • 这不是我看到的行为。数组在哪里排序?我使用arraySort方法对数组进行排序。对你有用吗?如果我输入10个数字,其中包括1个,并选择1作为搜索目标,我将得到未找到的响应=/@克里斯,我没有