Java 二进制搜索和顺序搜索
我是java新手。我正在尝试使用顺序搜索和二进制搜索。我可以成功加载数组,但搜索出错。我看不出我做错了什么。我的两种方法都有问题吗Java 二进制搜索和顺序搜索,java,Java,我是java新手。我正在尝试使用顺序搜索和二进制搜索。我可以成功加载数组,但搜索出错。我看不出我做错了什么。我的两种方法都有问题吗 package stu.paston.program6; import java.io.FileInputStream; import java.io.IOException; import java.util.Scanner; import java.util.InputMismatchException; public class InventoryData
package stu.paston.program6;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;
import java.util.InputMismatchException;
public class InventoryData
{
private int[] invData = new int[200];
private int count = 0;
InventoryData(){}//Constructor
public void loadArray()
{
double partNum;
double price;
try
{
String filename = "inventoryPricing.dat";
Scanner infile = new Scanner (new FileInputStream(filename));
while (infile.hasNextInt())
{
invData[count] = infile.nextInt();
partNum = infile.nextDouble();
price = infile.nextDouble();
++count;
}
infile.close();
}
catch (IOException ex)
{
count = -1;
ex.printStackTrace();
}
}
public int seqSearch(int[] invData, int value)
{
for (int i : invData)
{
if (i==value)
{
return i;
}
}
return -1;
}
public int binSearch(int[] invData, int value, int first, int last)
{
if (first > last)
return -1;
int middle = (first + last) / 2;
if (invData[middle] == value)
return middle;
else if (invData[middle] > value)
return binSearch(invData, value, first, middle-1);
else
return binSearch(invData, value, middle+1, first);
}
public int getCount()
{
return count;
}
public int getOneDataNum(int index)
{
if (index >=0 && index < count)
return invData[index];
else
return -1;
}
}// End InventoryData
package stu.paston.program6;
import java.util.Scanner;
public class MainClass
{
public static void main(String[] args)
{
InventoryData productData = new InventoryData();
Scanner myScanner = new Scanner(System.in);
int index;
productData.loadArray();
System.out.println("What is the part number you are looking for ->");
index= myScanner.nextInt();
if (productData.seqSearch(null, index)>=0)
System.out.printf("Sequential fount part number #d and the price is %d", index, productData.seqSearch(null, index));
else
System.out.printf("Sequential did not find part number %d", index);
if (productData.binSearch(null, index, index, index)<=0)
System.out.printf("\nBinary fount part number #d and the price is %d", index, productData.binSearch(null, index, index, index));
else
System.out.printf("\nBinary did not find part number %d", index);
myScanner.close();
}
}
包stu.paston.program6;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.util.Scanner;
导入java.util.InputMismatchException;
公共类清单数据
{
私有整数[]invData=新整数[200];
私有整数计数=0;
InventoryData(){}//构造函数
公共void loadArray()
{
双胎;
双倍价格;
尝试
{
字符串filename=“inventoryPricing.dat”;
Scanner infle=新扫描仪(新文件输入流(文件名));
while(infle.hasNextInt())
{
invData[count]=infle.nextInt();
partNum=infle.nextDouble();
price=infle.nextDouble();
++计数;
}
infle.close();
}
捕获(IOEX异常)
{
计数=-1;
例如printStackTrace();
}
}
公共int seqSearch(int[]invData,int value)
{
用于(int i:invData)
{
if(i==值)
{
返回i;
}
}
返回-1;
}
公共int-bin搜索(int[]invData,int-value,int-first,int-last)
{
如果(第一个>最后一个)
返回-1;
中间整数=(第一个+最后一个)/2;
if(invData[中间]==值)
返回中间;
else if(invData[中间]>值)
返回bin搜索(invData,value,first,middle-1);
其他的
返回bin搜索(invData,value,中间+1,第一);
}
public int getCount()
{
返回计数;
}
公共int getOneDataNum(int索引)
{
如果(索引>=0&&index”;
index=myScanner.nextInt();
if(productData.seqSearch(null,索引)>=0)
System.out.printf(“顺序源零件号#d,价格为%d”,索引,productData.seqSearch(null,索引));
其他的
System.out.printf(“顺序未找到零件号%d”,索引);
如果(productData.binSearch(null,index,index,index,index)您正在将null引用传递给seqSearch
:
productData.seqSearch(null, index)
当然你会得到一个NullPointerException
改变
public int seqSearch(int[] invData, int value)
到
您的类已具有invData
成员
也改变
public int binSearch(int[] invData, int value, int first, int last)
到
指定“错误输出”的确切含义。还要注意,二进制搜索需要排序的数据集。这是我的错误:“线程“main”中的异常java.lang.NullPointerException位于stu.paston.program6.InventoryData.seqSearch(InventoryData.java:45)位于stu.paston.program6.MainClass.main(MainClass.java:20)”你知道NullPointerException
是什么意思吗?我不知道nullpointerExceptions是什么意思。我想我该如何解决这个问题?@BrockPaston看起来你的InventoryData
有一个内部数组。因此,你应该在搜索方法中使用该数组,而不是从外部获取数组参数。
public int binSearch(int[] invData, int value, int first, int last)
public int binSearch(int value, int first, int last)