java: 无法从静态上下文中引用非静态 方法 add(int,int)出现这个错误怎么解决package table; import java.util.Arrays; /** * @author 小蒲七七 * @date 2023/5/28 10:08 * @version 1.0 / public class ArrayList { public int[] elem;// NULL public int useSize;// 存储了多少个有效的数据 0 public static final int DEFAULT_SIZE = 10; public ArrayList() { this.elem = new int[DEFAULT_SIZE]; } // 打印 public void display() { for (int i = 0; i < this.useSize; i++) { System.out.println(this.elem[i] + " "); } System.out.println(); } // 获取长度 public int size() { return this.useSize; } // 判断是否包含某个元素 public boolean contains(int toFind) { for (int i = 0; i < this.useSize; i++) { if (this.elem[i] == toFind) { return true; } } return false; } // 查找某个元素对应的位置 public int indexOf(int toFind) { for (int i = 0; i < this.useSize; i++) { if (this.elem[i] == toFind) { return i; } } return -1;// 因为数组没有负数下标 } // 新增元素,默认在数组最后新增 public void add(int data) { if (this.isFull()) { this.elem = Arrays.copyOf(this.elem, 2this.elem.length); } this.elem[this.useSize] = data; this.useSize++; } /** * 扩容 / private void resize() { } /* * 判断是否为满 * @return / public boolean isFull() { /if(this.useSize == this.elem.length) { return true; } return false;/ return this.useSize == this.elem.length; } // 在pos 位置新增元素 public void add(int pos, int data) {// 重载 checkAddIndex(pos); if(isFull()){ this.elem = Arrays.copyOf(this.elem, 2this.elem.length); } for (int i = useSize - 1; i <= pos; i--) { elem[i + 1] = elem[i]; } elem[pos] = data; useSize++; } /** * 检查add数据时, pos是否合法 * @param */ private void checkAddIndex(int pos) { if(pos < 0 || pos > useSize) { throw new AddIndexOutOfException("add元素时,位置不合法,请检查合法性"); } } }
时间: 2024-01-26 09:04:52 浏览: 64
java无法从静态上下文中引用非静态一些错误
5星 · 资源好评率100%
这段代码中出现了一个名为ArrayList的类,而Java中已经有一个同名的类java.util.ArrayList,这可能会导致冲突。同时,出现错误的原因是在静态方法中调用了非静态方法add(int, int),可以通过以下两种方式解决这个问题:
1. 将被调用的方法声明为静态方法:
```
public static void add(ArrayList list, int pos, int data) {
if (list.isFull()) {
list.elem = Arrays.copyOf(list.elem, 2 * list.elem.length);
}
for (int i = list.useSize - 1; i >= pos; i--) {
list.elem[i + 1] = list.elem[i];
}
list.elem[pos] = data;
list.useSize++;
}
```
2. 创建一个ArrayList对象来调用非静态方法:
```
public static void add(ArrayList list, int pos, int data) {
if (list.isFull()) {
list.elem = Arrays.copyOf(list.elem, 2 * list.elem.length);
}
for (int i = list.useSize - 1; i >= pos; i--) {
list.elem[i + 1] = list.elem[i];
}
list.elem[pos] = data;
list.useSize++;
}
public static void main(String[] args) {
ArrayList list = new ArrayList();
add(list, 0, 1); // 必须创建一个对象来调用非静态方法
}
```
阅读全文