麻烦排序对象数组

时间:2013-11-20 17:28:12

标签: java arrays object

嘿伙计们,我在浏览对象数组时遇到了麻烦。总之,我不知道如何。我的代码是:

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;
}

}

我正在尝试在数组的元素中查找第一个参数,它是一个字符串。例如,如果某人键入菠菜,我想查找关键字菠菜,并返回第二个参数,即菠菜的卡路里。

5 个答案:

答案 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可能会更好。