java - 如何解决 Java IndexOutOfBoundsException?
问题描述
我正在创建一个方法public boolean add (int index, E elem)
,它在我的链表的索引位置添加一个元素,但每次我得到IndexOutOfBoundsException
.
我无法弄清楚为什么,搜索了类似的解决方案,但都是徒劳的。这是我的代码:
public boolean add(int index, E elem) {
Node<E> node;
node = new Node<>(elem);
Boolean result = false;
if (index > size) {
System.out.println("Index out of bounds");
}
if (index == 0) {
head = node;
node.next = indices.get(index + 1);
node.prev = null;
node.next.prev = node;
result = true;
} else if (index == (size - 1)) {
Node<E> node1 = indices.get(index - 1);
tail = node;
node1.next = node;
node.next = null;
node.prev = node1;
result = true;
} else if (index > 0 && index < (size - 1)) {
Node<E> node1;
Node<E> node2;
node1 = indices.get(index - 1);
node2 = indices.get(index);
node.next = node1;
node.prev = node2;
node1.next = node;
node2.prev = node;
result = true;
}
indices.add(index, node);
size++;
System.out.println("Element " + elem + " added at the index: " + index);
System.out.println("The size of the list now is: " + size);
return result;
}
这是类字段`public class IDLList {
private class Node<E>{
E Data;
Node<E> next;
Node<E> prev;
Node(E elem){
this.Data = elem;
this.next = null;
this.prev = null;
}
Node (E elem, Node<E> prev, Node<E> next){
this.Data = elem;
this.prev = prev;
this.next = next;
}
}
Node<E> head;
Node<E> tail;
int size;
ArrayList<Node<E>> indices;`
这是 get 函数:`public E get(int index){
Node<E> node;
node = indices.get(index);
E value;
value = node.Data;
System.out.println("Value at index " + index + " is " + value);
return value;
}`
解决方案
看看你的情况,一定是index >= size
因为索引是从零开始的。
public boolean add (int index, E elem) {
Node<E> node = new Node<>(elem); // You don't need to split definition and initialization
if(index >= size) {
System.out.println("Index out of bounds");
return false;
}
if (index == 0) {
head = node;
node.next = indices.get(1); // Why is the next the second item, not the first? Maybe `indices.get(0)`?
node.prev = null;
node.next.prev = node;
} else if (index == (size - 1)) {
Node<E> node1 = indices.get(index - 1);
tail = node;
node1.next = node;
node.next = null;
node.prev = node1;
} else if (index > 0 && index < (size - 1)) {
Node<E> node1 = indices.get(index - 1);
Node<E> node2 = indices.get(index);
node.next = node1; // Why is `node1`, not `node2`?
node.prev = node2; // Vice versa
node1.next = node;
node2.prev = node;
} else {
return false;
}
// If result is `false` why do u to add your node?
indices.add(index, node);
++size;
System.out.println("Element " + elem + " added at the index: " + index);
System.out.println("The size of the list now is: " + size);
return true;
}
推荐阅读
- python - Python if 语句中何时需要“pass”?
- linux - 如何从 apache 模块访问响应数据?
- java - Spring Boot 2 中无法识别 MappingJackson2HttpMessageConverter 配置
- google-app-engine - Google App Engine - Mail() 附件
- c - 我想打印一个元素在 C 中的随机数数组中重复的次数
- visualization - 如何使用 Codesys v2 在 PLC 界面中创建下拉列表。3
- python - 如何在python中打印形状?寻找一种不同的、更有效的方式
- windows - WAMP,Windows 10:#2002 - 由于目标机器主动拒绝连接,无法建立连接。—
- javascript - 无法将状态数组值传递给 DOM
- ios - Swift 4 在 UITableView 中显示来自 api 的图像的正确方法