Java 应返回下标号时未找到返回的线性搜索
我正在为Java做一个家庭作业,一个程序应该从用户那里读入10个数字,然后要求搜索一个数字。它对数字进行排序(升序)并在数组上执行线性搜索,然后应该返回找到它的下标,或者返回一条消息说找不到 即使在应该返回下标时,我的代码也会给我“notfound”响应。你能看看我的密码吗?我试着改变我的if语句,但没用。我已经尽可能地使用了本书中的搜索和排序方法示例(请随意指出错误) 这是代码Java 应返回下标号时未找到返回的线性搜索,java,arrays,sorting,search,Java,Arrays,Sorting,Search,我正在为Java做一个家庭作业,一个程序应该从用户那里读入10个数字,然后要求搜索一个数字。它对数字进行排序(升序)并在数组上执行线性搜索,然后应该返回找到它的下标,或者返回一条消息说找不到 即使在应该返回下标时,我的代码也会给我“notfound”响应。你能看看我的密码吗?我试着改变我的if语句,但没用。我已经尽可能地使用了本书中的搜索和排序方法示例(请随意指出错误) 这是代码 package program11; import java.util.Scanner; public class
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
成为一个双精度而非整数。我不确定是什么导致了您的问题,但我发现您的代码存在一些问题
arrayBuild
。或者,您可以通过将objective
的类型更改为double并让用户输入double来搜索doublelinearCheck
时,您没有将结果存储在任何位置,应该将其分配给变量
double foundLocation = linearCheck(arrayBuild, objective);
linearCheck
的返回值,如下所示
if (foundLocation >= 0) {
System.out.println("Found at index: " + foundLocation);
} else {
System.out.println("Not Found");
}
arraySort
这不是我看到的行为。数组在哪里排序?我使用arraySort方法对数组进行排序。对你有用吗?如果我输入10个数字,其中包括1个,并选择1作为搜索目标,我将得到未找到的响应=/@克里斯,我没有