Array / ArrayList OutOfBoundsException

时间:2012-12-04 02:29:46

标签: java

public static void getVegetableFromUser()
{
 String[] veg = SandwichDB.getVegetable();
    HashMap<String, String> getMapVegPrice = SandwichDB.getMapVegPrice();
    int vegSave = Validator.getInt(Scanner, "Select Vegetables [1, 8]: ", 1, 8);
    String v = veg[vegSave-1];
    sandwich.setVegetables(v);
}

好的,所以控制台打印出来

  

===选择三明治蔬菜===
  1个红洋葱$ 0.10
  2橄榄$ 0.10
  3个咸菜$ 0.10
  4生菜$ 0.20
  5青椒$ 0.25
  6个西红柿$ 0.30
  7个奶酪$ 0.49
  8退出蔬菜科
  选择蔬菜[1,8]:

我的想法是能够挑选多种蔬菜,直到我选择8即退出蔬菜部分。我怎么能这样做?使用else-if语句?

此外,蔬菜应该是一个数组,而不是一个字符串...就像在这一行:String v = veg[vegSave-1]

这是我的SandwichDB.app上的代码:

public static String[] getVegetableInfo()
{
    ArrayList<String> vegsList = new ArrayList<>();

    try (BufferedReader in =
            new BufferedReader(
            new FileReader("vegetable.txt")))
    {
        String line = in.readLine();
        while (line != null)
        {
            String[] elems = line.split("~");
            vegsList.add(elems[0] + " $" + elems[1]);
            line = in.readLine();
        }
        vegsList.add("Quit Vegetable Section");
    }
    catch(IOException e)
    {
        System.out.println(e);
        return null;
    }
    String[] vegetableInfo = vegsList.toArray(new String[]{});
    return vegetableInfo;
}    

1 个答案:

答案 0 :(得分:1)

这将有助于查看其余代码,但根据您发布的内容,我会认为您正在获取arrayOutOfBoundsException,因为您正在尝试获取有关不存在的蔬菜的信息。尝试添加“if”以检查在执行此行之前是否选择了8:

String v = veg[vegSave-1];

也许试试:

if(vegSave == 8){
    //TODO: Add code that quits vegetable section
} else {
    String v = veg[vegSave-1];
}

这样,如果选择了8,程序就不会尝试将String v设置为等于蔬菜。

希望这会有所帮助,我不太确定你想要什么。 (例如,“也是蔬菜假设是一个数组而不是像这一行的字符串字符串v = veg [vegSave-1]。”问题或陈述?)