try { ArrayList.add(1,99); }catch (AddIndexOutOfException e) { e.printStackTrace(); } ArrayList.display();java: 无法从静态上下文中引用非静态 方法 add(int,int)出现这个错误怎么解决
时间: 2024-01-25 07:04:54 浏览: 64
这个错误是因为你试图在静态方法中调用非静态方法add(int, int),需要创建一个ArrayList对象来调用非静态方法。以下是可能的解决方案:
```
public static void main(String[] args) {
ArrayList list = new ArrayList();
try {
list.add(1, 99);
} catch (AddIndexOutOfException e) {
e.printStackTrace();
}
list.display();
}
```
在这个例子中,我们创建了一个ArrayList对象list,并使用它来调用非静态方法add(int, int)。注意,在调用这个方法之前,我们需要使用try-catch块捕获可能抛出的AddIndexOutOfException异常。最后,我们使用list对象调用非静态方法display()来打印数组中的所有元素。
相关问题
package table; /** * @author 小蒲七七 * @version 1.0 * @date 2023/5/28 10:17 */ public class Test { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add(1); arrayList.add(2); arrayList.add(3); arrayList.display(); // 不能在静态方法中调用非静态方法 add(int, int),需要创建一个ArrayList对象来调用非静态方法。 ArrayList list = new ArrayList(); try { list.add(1, 99); } catch (IndexOutOfException e) { e.printStackTrace(); } list.display(); } }怎么修改
可以将代码中的
```java
ArrayList list = new ArrayList();
try {
list.add(1, 99);
} catch (IndexOutOfException e) {
e.printStackTrace();
}
list.display();
```
修改为
```java
ArrayList list = new ArrayList();
try {
list.add(0, 99); // 在下标为0的位置插入元素
} catch (IndexOutOfException e) {
e.printStackTrace();
}
list.display();
```
这样就能在静态方法中调用非静态方法了,并且在下标为0的位置插入了一个元素99。
Task 2. Create a list of students by reading from student_hobbies.txt and display the list. // - You will also need to create a Student class, which has at least // two data fields: student name and an ArrayList of hobbies (String-type).优化以下代码private static ArrayList<Student> readFile(String string) throws IOException{ ArrayList<Student> studentlist=new ArrayList<Student>(); File file = new File("student_hobbies_JU.txt"); Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { String line = scanner.nextLine(); String[] data = line.split(", "); System.out.println(data); String name = data[0]; ArrayList<String> hobbies = new ArrayList<String>(); for(int i=0;i<data.length;i++){ hobbies.add(data[i]); } Student student = new Student(name, hobbies); studentlist.add(student); System.out.println(student); } scanner.close(); return studentlist; }//end readFile
下面是优化后的代码,其中将文件名作为参数传入函数中,使函数更加通用:
```
private static ArrayList<Student> readFile(String fileName) throws IOException {
ArrayList<Student> studentList = new ArrayList<Student>();
File file = new File(fileName);
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] data = line.split(", ");
String name = data[0];
ArrayList<String> hobbies = new ArrayList<String>();
for (int i = 1; i < data.length; i++) { // 从第二个元素开始,将所有的兴趣爱好添加到hobbies列表中
hobbies.add(data[i]);
}
Student student = new Student(name, hobbies);
studentList.add(student);
}
scanner.close();
return studentList;
}
```
该函数将指定文件中的内容读取到一个ArrayList<Student>中,并返回该列表。下面是Student类的代码:
```
public class Student {
private String name;
private ArrayList<String> hobbies;
public Student(String name, ArrayList<String> hobbies) {
this.name = name;
this.hobbies = hobbies;
}
public String getName() {
return name;
}
public ArrayList<String> getHobbies() {
return hobbies;
}
public void setName(String name) {
this.name = name;
}
public void setHobbies(ArrayList<String> hobbies) {
this.hobbies = hobbies;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", hobbies=" + hobbies +
'}';
}
}
```
该类包含两个数据字段:name和hobbies,分别表示学生的姓名和兴趣爱好列表。该类还包含构造函数、getter和setter方法以及toString方法,用于打印学生对象的信息。可以使用以下代码调用readFile函数并打印学生列表:
```
try {
ArrayList<Student> studentList = readFile("student_hobbies.txt");
for (Student student : studentList) {
System.out.println(student);
}
} catch (IOException e) {
e.printStackTrace();
}
```
阅读全文