public void display() { for (int i = 0; i < this.usedSize; i++) { System.out.println(this.elem[i] + " "); 为啥报错
时间: 2024-02-14 22:08:17 浏览: 65
这段代码在Java中缺少了一个方法的结束括号 "}",导致编译器无法识别该方法的完整性,从而报错。正确的代码应该是:
```
public void display() {
for (int i = 0; i < this.usedSize; i++) {
System.out.println(this.elem[i] + " ");
}
}
```
注意到这里我只是简单地解释了代码的错误,但是对于如何解决该问题,需要根据具体错误提示进行修改。所以在遇到代码错误时,最好能提供具体的错误提示信息,这样才能更好地解决问题。
相关问题
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元素时,位置不合法,请检查合法性"); } } }
这段代码中出现了一个名为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); // 必须创建一个对象来调用非静态方法
}
```
public class VariableDemo { int a = 111; final int b = 222; public void display() { System.out.println("执行display()"); int a = 333; System.out.println(a); System.out.println(this.a); System.out.println(b); System.out.println(this.b); } public static void main(String[] args) { // TODO Auto-generated method stub int a = 444; System.out.println("执行main()"); System.out.println(a); //System.out.println(this.a); {// 代码块1 int c = 666; System.out.println(c); } System.out.println(c); {// 代码块2 int d = 666; System.out.println(d); } int d = 888; System.out.println(d); VariableDemo vd = new VariableDemo(); vd.display(); vd.b = 999; System.out.println(vd.b); } }
该代码存在以下问题:
1. 在`main`方法中,不能直接访问非静态变量`a`和`b`,因为它们是属于对象的,必须先创建一个类的实例才能访问。
2. `final`修饰的变量`b`不能被修改,所以在`vd.b = 999;`中会编译错误。
3. 在代码块1中定义的变量`c`只能在代码块内部访问,超出代码块范围后就不能再访问了。在`System.out.println(c);`处会编译错误。
4. 变量名`d`在代码块2和`main`方法中都出现了,这是不合法的,因为在同一级作用域中变量名不能重复。
修正后的代码如下:
```
public class VariableDemo {
int a = 111;
final int b = 222;
public void display() {
System.out.println("执行display()");
int a = 333;
System.out.println(a);
System.out.println(this.a);
System.out.println(b);
System.out.println(this.b);
}
public static void main(String[] args) {
int a = 444;
System.out.println("执行main()");
System.out.println(a);
{
int c = 666;
System.out.println(c);
}
// System.out.println(c); // 编译错误
{
int d = 666;
System.out.println(d);
}
int d = 888;
System.out.println(d);
VariableDemo vd = new VariableDemo();
vd.display();
// vd.b = 999; // 编译错误
System.out.println(vd.b);
}
}
```
修正后的代码中,将`vd.b = 999;`注释掉,因为`b`是用`final`修饰的,不能被修改。同时,变量名重复的问题也得到了修正。
阅读全文