我正在创建一个对象数组,其中应该通过线性方法和二进制方法进行搜索。
问题是如何使用适当的数据类型遍历数组并进行比较。
public class FoodMain {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
Food[] foodlist = new Food[3];
//Initialising food objects array
for (int i = 0; i < foodlist.length; i++) {
foodlist[i] = new Food(Food.getId(), Food.getDescription(), Food.getIngredients(), Food.getSellingPrice());
}
FoodMain foodObj = new FoodMain();
foodObj.show(foodlist);
System.out.print("Enter the search value: ");
int value = sc.nextInt();
for(int j=0; j < foodlist.length; j++) {
// Error on line Incompatible operand types Food and int
if(foodlist[j] == value) {
System.out.println("The value " + value + " is at index " + j);
break;
}
else {
System.out.println("Value not in array!!!");
break;
}
}
}
要搜索的对象数组的屏幕截图数组对象
这是食品类的代码
package foodObjectArray;
import java.util.Scanner;
public class Food {
static Scanner sc = new Scanner(System.in);
public int id;
public String description;
public String ingredients;
public double sellingPrice;
// Food Class constructor
public Food(int id, String description, String ingredients, double sellingPrice) {
super();
this.id = id;
this.description = description;
this.ingredients = ingredients;
this.sellingPrice = sellingPrice;
}
public static int getId() {
System.out.println("Input food ID");
return sc.nextInt();
}
public static String getDescription() {
System.out.println("Input food description");
return sc.next();
}
public static String getIngredients() {
System.out.println("Enter the Ingredients");
return sc.next();
}
public static double getSellingPrice() {
System.out.println("Input food Price");
return sc.nextDouble();
}
希望这能帮助我解释
让我们忽略所有其他问题,只关注线性搜索。假设您正在按id搜索。
for(int j=0; j < foodlist.length; j++) {
if(foodlist[j].id == value) {
System.out.println("The value " + value + " is at index " + j);
break;
}
else {
System.out.println("Value not in array!!!");
break;
}
}
}
如果第一项不匹配,else分支将中断循环。它不会搜索整个数组。它实际上只是查看数组中的第一项。
您需要删除其他分支并使用标志(布尔值)或其他变量来指示找到。
int foundIndex = -1; //-1 means not found.
for(int j=0; j < foodlist.length; j++) {
if(foodlist[j].id == value) {
foundIdex = j;
break;
}
}
if (indexFound > -1)
System.out.println("Found at " + indexFound);
else
System.out.println("Not found.");
这里至少有几个错误。
首先,您不想要if(fodlist[j]. id==value){
吗?这将缓解不兼容的操作数。您需要指定要匹配的字段。
风格警察会讨厌你的代码,并要求你定义getter和setter。但是没有搜查令,你不能让他们进来
此外,当您修复了代码将输出“值不在数组中!!!”对于与搜索值不匹配的每个项目。
您需要将“未找到”检查移出for循环。但让我们一步一步来。
问题内容: 有什么方法可以在具有对象的ArrayList中实现二进制搜索?在此示例中,ArrayList将使用字段“ id”进行排序。 如果我应该使用二进制搜索返回具有指定ID的用户,“ User getUserById(ArrayList users,int userid)”将如何?这有可能吗? 问题答案: Java教程的对象排序文章中有一个示例,您可以编写自己的示例以对自定义类型进行比较。 然
问题内容: 是否有一个库函数对列表/元组执行二进制搜索,如果找到则返回项目的位置,否则返回“ False”(-1,None等)? 我在bisect模块中找到了函数,但是即使该项目不在列表中,它们仍然会返回位置。这对于他们的预期用途来说是完全可以的,但是我只想知道列表中是否包含某项(不想插入任何内容)。 我考虑过使用然后检查该位置处的项目是否等于我要搜索的项目,但这似乎很麻烦(而且我还需要进行边界检
我一直在学习Coursera上的DSA课程,本周介绍了搜索算法。而二进制搜索(O(logn))的复杂度优于线性搜索(O(n))。但是,考虑到首先对数组进行排序需要nlogn工作,为什么我要在未排序的数组中使用它呢。 如果二进制搜索只在数组已经排序的情况下使用,那么为什么这两种算法经常比较,因为显然它们有不同的用例。
我在这里遵循这个例子: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html 以下查询: 与预期的一条记录匹配。假设我只想返回用户为“约翰·史密斯”和“艾利斯·怀特”的文档。 我试过: 但这返回零结果。我如何获得同时包含“Alice White”和“John Smith”的文档(这应该只是在原始结果中
问题内容: 我有一个排序的数组,想要对它进行二进制搜索。 所以我想问一下Swift库中是否已有诸如sort等的东西?还是有类型独立版本可用? 当然,我可以自己编写它,但是我想避免再次发明轮子。 问题答案: 这是使用二进制搜索的通用方法:
我想输出给定值数组的二叉搜索树。它遵循二叉搜索树原理。图表向左旋转 这是所需的输出: 我该怎么修