【问题标题】:sequential search implementation顺序搜索实现
【发布时间】:2015-03-19 18:08:13
【问题描述】:

嘿,伙计们,我正在尝试编写一个类,我在我的类中的一个方法是假设搜索一个数组以查找其产品项目由我给出的第三个参数的项目。我有2个问题。

  1. 我不知道如何在没有指定大小的情况下在类中声明数组
  2. 我知道我必须使用顺序搜索来搜索数组,但我不知道如何在类中实现此代码。

public static int ProductSearch(GroceryItems[] product, int numProducts, int productNumber)

【问题讨论】:

  • numProducts 不是必需的,从数组长度可以执行所需的搜索操作

标签: java class search methods


【解决方案1】:

您是否正在寻找 POJO 类的任何属性匹配项。

在此示例中,如果找不到 attr,则需要 -1。

 public static void main(String[] args) {
        // TODO code application logic here
        GroceryItems[] GroceryItems = new GroceryItems[]{new GroceryItems(5), new GroceryItems(22), new GroceryItems(45), new GroceryItems(95)};
        int ProductSearch = ProductSearch(GroceryItems, 5, 67);
        System.out.println(ProductSearch);
    }

    public static int ProductSearch(GroceryItems[] product, int numProducts, int productNumber) {
        for (int i = 0; i < product.length; i++) {
            if (product[i].productNumber == productNumber) {
                return i + 1;
            }
        }
        return -1;
    }

    private static class GroceryItems {

        int productNumber;

        public GroceryItems() {
        }

        public GroceryItems(int productNumber) {
            this.productNumber = productNumber;
        }
    }

【讨论】:

  • 这里我已经将 productNumber 考虑到 bean/class 中,并与 bean/class 的 productNumber attr 进行一一的 seq 搜索。
  • 我同意,使用 bean 并实现 equals 方法。 +1
【解决方案2】:
  • 方法名以第一个小写字母开头
  • GroceryItems[] -> 产品
  • productNumber 也是 GroceryItem 的一个属性

public static int productSearch(GroceryItems[] products, int numProducts, int productNumber) {

    boolean found = false;
    int i = 0;

    if (products == null || 
        products.length != numProducts || 
        numProducts < 1))
        return -1;

    while (!found && i < numProduct) {
        if (products[i].productNumber == productNumber)
            found = true;
        else i++;
    }

    if (!found)
        i = -1;

    return i;
}

【讨论】:

  • 是的,除非是-1。
【解决方案3】:
  1. 如果不设置大小,则无法创建数组。有一些集合,例如 ArrayList 幕后的工作是什么(创建更大的数组并复制到它)
  2. ArrayList 也有搜索方法,所以你可以使用它,不需要处理搜索算法。您唯一应该了解的是此示例中的 equals 方法:

导入 java.util.ArrayList; 导入 java.util.List;

公共类 ProdSearch {

public static void main(String[] args) {
    List<GroceryItems> prods = new ArrayList<GroceryItems>();

    GroceryItems p1 = new GroceryItems();
    p1.setProductNumber(1);
    prods.add(p1);

    GroceryItems p2 = new GroceryItems();
    p2.setProductNumber(4);
    prods.add(p2);

    GroceryItems p3 = new GroceryItems();
    p3.setProductNumber(1);

    boolean res = productContains(prods, 123, p3);
    if (res) {
        System.out.println("Contains..");
    } else {
        System.out.println("No such an element..");
    }
}

public static boolean productContains(List<GroceryItems> product, GroceryItems productSearch) {
    return product.contains(productSearch);
}

}

类 GroceryItems { int productNumber;

public int getProductNumber() {
    return productNumber;
}

public void setProductNumber(int productNumber) {
    this.productNumber = productNumber;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + productNumber;
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    GroceryItems other = (GroceryItems) obj;
    if (productNumber != other.productNumber)
        return false;
    return true;
}

}

【讨论】:

  • @override 是什么?
  • @override 注解是 Eclipse 生成的,当你重写(重新定义)超类的方法时它是一个提示。如果没有要覆盖的内容,代码将无法编译,因此有助于检查方法修饰是否正确,但不是必须的。
  • 我被指示让类 prod 包含搜索算法,或者在这种情况下它是主要的,这就是我感到困惑的地方我只是不知道我的类定义中应该有多少它变得非常有压力我必须使用原始问题中列出的方法。我不必使用顺序搜索我可以使用您的数组列表但是您可以编辑代码,包括我的方法 public static int productSearch(GroceryItems[] products, int numProducts, int productNumber)
  • 好的,我做到了,希望你需要。 ;) 祝你好运!
  • 您的代码使用 arraylist where 在指定使用数组的问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
相关资源
最近更新 更多