繁体   English   中英

无法通过对象数组进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM