[英]Trouble sorting through an Object array
大家好,我无法遍历对象数组。 简而言之,我不知道该怎么做。 我的代码是:
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;
}
}
我试图在数组的元素中寻找第一个参数,它是一个字符串。 例如,如果有人输入菠菜,我想寻找关键字菠菜,还要返回第二个参数,即菠菜的卡路里。
因此,您有一个元素数组,您正在尝试查找哪个元素( Calories
实例)的名称与用户给定的输入相匹配。
试试看,for循环将帮助您遍历数组,并与每个名称进行比较...如果发现任何问题,请在此处发布。 我们将能够为您提供进一步的帮助。
给定代码中的这两个变量:
Calories[] array;
String answer2;
这就是我如何找到与“ answer2”命名的食物相匹配的卡路里的方法:
for(int i = 0; i < array.length; i++) {
if(array[i].getName().equals(answer2)) {
return array[i].getCalorie();
}
}
所有这些操作就是遍历一系列食物,并将用户输入的内容与每种食物的名称进行比较。 如果找到匹配项,则返回找到的食物的卡路里。
给定您的array
变量,此方法应执行您想要的操作:
public Calories findCaloriesForFood(String food) {
for (Calories calories : array) {
if (calories.getName().equalsIgnoreCase(food)) {
return calories;
}
}
return null;
}
首先,
你的while循环和if循环是多余的。 我这么说是因为,您首先从“ WHILE”循环中检查所有非N或NO的输入,然后检查Y或Yes。 相反,为什么不在while循环中检查Y或Yes。 因此,在这种情况下,如果他输入Y或yes,然后退出所有其他文本输入,则只询问他想要的食物。
其次,
您正在使用一维数组。 因此,数组中的每个加法项都存储有一个索引。 在您的情况下,索引0将有菠菜,土豆为1,依此类推。 因此,为了从数组中检索对象,您需要指定其索引然后取回它。 有了对象后,获取对象中的值所需要做的就是使用其getter方法。 在您的情况下,逻辑是遍历数组,并对照输入文本检查每个名称,当找到匹配项时,这就是您需要的对象。
在这种情况下,我将使用一个称为“食物”的“枚举”。
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可能会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.