列表越界访问的结果及帕斯卡三角代码嵌套循环逻辑疑问
问题解答
1. 访问列表不存在的索引会发生什么
在Java中,调用List.get(int index)方法时,如果传入的索引小于0或者大于等于列表的size(),会直接抛出IndexOutOfBoundsException运行时异常,程序会终止执行(除非提前捕获该异常)。
2. 帕斯卡三角代码的嵌套循环疑问解析
先看你提供的Java代码:
List<List<Integer>> triangle = new ArrayList<List<Integer>>(); //first row is always 1 and only 1 triangle.add(new ArrayList<>()); triangle.get(0).add(1); //loop through the numbers of rows and add them previous rows for(int rowNums = 1; rowNums < numRows; rowNums++){ //creating new row List<Integer> row = new ArrayList<>(); //previous row, used to add List<Integer> prevRow = triangle.get(rowNums - 1); //first element in the pascal triangle is 1 row.add(1); for(int i = 1; i < rowNums; i++){ row.add(prevRow.get(i - 1) + prevRow.get(i)); } //last element in a pascal triangle is always 1 row.add(1); //add the row to the triangle list triangle.add(row); } return triangle;
当生成第1行(对应代码中rowNums=1)时,内层循环的条件是i < rowNums,也就是i < 1。而内层循环的起始值是i=1,这个条件不成立,所以内层循环根本不会执行,自然不会去访问prevRow.get(1)(第0行只有索引0的元素)。
此时代码只会执行:
- 给当前行添加第一个元素
1 - 给当前行添加最后一个元素
1
最终第1行就是[1,1],完全不会触发索引越界异常。
内容的提问来源于stack exchange,提问作者still_learning
相关产品推荐
相关产品推荐

