嘿伙计们,我在浏览对象数组时遇到了麻烦。总之,我不知道如何。我的代码是:
import java.util.Scanner;
public class CalorieCalculator {
public static void main(String[] args) {
Scanner letterInput = new Scanner(System.in);
Calories[] array = {new Calories("spinach", 23), new Calories("potato", 160), new Calories("yogurt", 230), new Calories("milk", 85),
new Calories("bread", 65), new Calories("rice", 178), new Calories("watermelon", 110), new Calories("papaya", 156),
new Calories("tuna", 575), new Calories("lobster", 405)};
System.out.print("Do you want to eat food? ");
String answer = letterInput.nextLine();
while (!answer.equalsIgnoreCase("no") || !answer.equalsIgnoreCase("n")){
if (answer.equalsIgnoreCase("Y") || answer.equalsIgnoreCase("yes")){
System.out.print("What kind of food would you like?");
String answer2 = letterInput.nextLine();
}
}//end if
}//end while loop
}//end main method
}//end CalorieCalculator class
class Calories{
private String name;
private int calorie;
Calories(String name, int calorie){
this.name = name;
this.calorie = calorie;
}
public int getCalorie(){
return this.calorie;
}
public String getName(){
return this.name;
}
}
我正在尝试在数组的元素中查找第一个参数,它是一个字符串。例如,如果某人键入菠菜,我想查找关键字菠菜,并返回第二个参数,即菠菜的卡路里。
答案 0 :(得分:0)
所以你有一个元素数组,并且你试图找到哪个元素(Calories
的实例)的名称与用户给出的输入相匹配。
尝试一下,for循环将帮助您浏览数组并与每个名称进行比较...如果您发现任何问题,请在此处发布。我们将能够为您提供进一步的帮助。
答案 1 :(得分:0)
在代码中给出这两个变量:
Calories[] array;
String answer2;
这就是我如何找到与“answer2”命名的食物相匹配的卡路里:
for(int i = 0; i < array.length; i++) {
if(array[i].getName().equals(answer2)) {
return array[i].getCalorie();
}
}
所有这一切都是通过食物阵列循环,并将用户的输入与每种食物的名称进行比较。如果找到匹配,则返回找到的食物的卡路里。
答案 2 :(得分:0)
根据您的array
变量,此方法应该执行您想要的操作:
public Calories findCaloriesForFood(String food) {
for (Calories calories : array) {
if (calories.getName().equalsIgnoreCase(food)) {
return calories;
}
}
return null;
}
答案 3 :(得分:0)
首先,
你的while循环和if循环是多余的。我之所以这么说是因为,你开始用你的&#34; WHILE&#34;循环检查所有非N或NO的输入,然后检查Y或是。相反,为什么不在你的while循环中检查Y或Yes。因此,在这种情况下,如果他输入Y或是,则只询问他想要的食物,并退出所有其他文本输入。
其次,
您使用的是单维数组。因此,每次添加到数组中都会与索引一起存储。在你的情况下,索引0将有菠菜,1对于马铃薯,依此类推。因此,为了从数组中检索对象,您需要指定其索引然后获取它。获得对象后,只需使用其getter方法即可获取其中的值。 你的情况中的逻辑是迭代数组并根据输入文本检查每个名称,当你找到匹配时,那就是你需要的对象。
答案 4 :(得分:0)
在这种情况下我会做的是使用&#34; enum&#34;叫食物。
public enum Food
{
SPINACH(23),
...
LOBSTER(405);
private int calories;
private Food(int pCalories)
{
calories = pCalories;
}
public int getCalories()
{
return calories;
}
}
然后,您可以查找特定食物的卡路里,如下所示:
String selectedFoodString = answer2;
Food selectedFood = Food.valueOf(selectedFoodString);
int selectedCalories = selectedFood.getCalories();
另一种方法是使用Map。食物的名称将是&#34;关键&#34;并且卡路里将是&#34;值。&#34; Map会使查找与Enum一样简单。不同之处在于样式,以及您需要列表的动态程度。如果列表永远不会改变,则枚举是合适的。如果您需要动态加载列表,Map可能会更好。