尝试更改for循环中的值时出现错误

时间:2019-09-13 11:55:54

标签: java spring-boot

我正在Spring Boot中开发一个应用程序。 但是我陷入了Java循环中。为什么会犯这样的错误。 即使我尚未对ArrayList进行任何设置,也会发生此错误。 java.lang.IndexOutOfBoundsException:索引:0,大小:0

这是我的代码:

    @RequestMapping("/update")
    public String Update(@RequestParam(value = "this") int updateId,Model model,String newName,String newSurname,String newCountry) {
        model.addAttribute("id",updateId);
        model.addAttribute("name",personList.get(updateId).getName());
        model.addAttribute("surname",personList.get(updateId).getSurname());
        model.addAttribute("country",personList.get(updateId).getCountry());
        for (Person person : personList) {
            System.out.println(personList.size());
            if (person.getId()==updateId) {
                if (null!=newName) {
                    person.setName(newName);
                    updateControl+=1;
                    System.out.println(personList.size());
                }
                if (null!=newSurname) {
                    updateControl+=1;
                    person.setSurname(newSurname);
                }
                if (null!=newCountry) {
                    person.setCountry(newCountry);
                    updateControl+=1;
                }
            }

        }
        if (updateControl==0) {
            return "update";
        }
        else {
            return "redirect:/";
        }
    }

这是我的错误:

There was an unexpected error (type=Internal Server Error, status=500).
Index: 0, Size: 0
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

3 个答案:

答案 0 :(得分:1)

如果您的personList为空,则无法在其上调用personList.get()。 您应该检查索引updateId是否小于personList大小。

@RequestMapping("/update")
public String Update(@RequestParam(value = "this") int updateId,Model model,String newName,String newSurname,String newCountry) {
    model.addAttribute("id",updateId);
    if (updateId < personList.size()) {
        model.addAttribute("name",personList.get(updateId).getName());
        model.addAttribute("surname",personList.get(updateId).getSurname());
        model.addAttribute("country",personList.get(updateId).getCountry());
    // ...
}

我也经常喜欢使用保护子句:

@RequestMapping("/update")
public String Update(@RequestParam(value = "this") int updateId,Model model,String newName,String newSurname,String newCountry) {
    model.addAttribute("id",updateId);
    if (updateId >= personList.size()) {
        throw new EntityNotFoundException();
    }
    // ...

如果您确定索引为updateId的元素一定存在,也许您也没有正确初始化或加载personList。

答案 1 :(得分:0)

错误显示,列表中没有数据。 但是,您尝试从空列表中获取数据。

model.addAttribute("name",personList.get(updateId).getName());
model.addAttribute("surname",personList.get(updateId).getSurname());
model.addAttribute("country",personList.get(updateId).getCountry());

请检查您的personList

答案 2 :(得分:0)

错误消息清楚地表明,您正在访问Index: 0列表中的Size: 0元素。 您可以在开始时添加null检查以避免这种情况,

if (null != personList && ! personList.isEmpty()) {
    //rest of code
}