Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二进制搜索和顺序搜索_Java - Fatal编程技术网

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

我是java新手。我正在尝试使用顺序搜索和二进制搜索。我可以成功加载数组,但搜索出错。我看不出我做错了什么。我的两种方法都有问题吗

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)