该代码错误在哪?import java.util.ArrayList; import java.util.Arrays; import java.util.Objects; import java.util.Scanner; class PersonOverride{ private String name; private int age; private boolean gender; public PersonOverride(String name, int age, boolean gender) { this.name = name; this.age = age; this.gender = gender; } public PersonOverride() { this("default",1,true); } @Override public String toString() { return name + '-' + age + "-" + gender ; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; PersonOverride that = (PersonOverride) o; return age == that.age && gender == that.gender && Objects.equals(name, that.name); } @Override public int hashCode() { return Objects.hash(name, age, gender); } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n1=sc.nextInt(); PersonOverride[] persons1 = new PersonOverride[n1]; int n2 = sc.nextInt(); ArrayList<PersonOverride> p = new ArrayList<>(); for (int i = 0; i < n2; i++) { PersonOverride per = new PersonOverride(sc.next(),sc.nextInt(),sc.nextBoolean()); p.add(per); } for (int i = 0; i < p.size()-1; i++) { if(p.get(i).equals(p.get(i+1))){ p.remove(i); i--; } } PersonOverride[] persons2 = new PersonOverride[p.size()]; for (int i = 0; i < persons2.length; i++) { persons2[i]=p.get(i); } for (int i = 0; i < persons1.length; i++) { System.out.println(persons1[i].toString()); } for (int i = 0; i < persons2.length; i++) { System.out.println(persons2[i].toString()); } System.out.println(persons2.length); System.out.println(Arrays.toString(PersonOverride.class.getConstructors())); } }
时间: 2024-03-25 08:40:43 浏览: 20
该代码错误在于最后一段输出 `persons1` 数组时,该数组并没有进行初始化,因此会出现 `NullPointerException` 异常。具体来说,你在代码中使用了如下语句:
```java
for (int i = 0; i < persons1.length; i++) {
System.out.println(persons1[i].toString());
}
```
这段代码中 `persons1` 数组没有被初始化,因此其中的元素都是 `null`。在执行 `persons1[i].toString()` 时,由于 `persons1[i]` 为 `null`,因此会抛出 `NullPointerException` 异常。
解决该问题的方法有两种:一种是将 `persons1` 数组初始化,例如:
```java
PersonOverride[] persons1 = new PersonOverride[n1];
for (int i = 0; i < n1; i++) {
persons1[i] = new PersonOverride();
}
```
另一种是直接删掉这段输出 `persons1` 数组的代码。
相关问题
java.util.Arrays.asList 的小问题
java.util.Arrays.asList() 可以将一个数组转换成一个 List 对象。但是需要注意的是,它返回的是 Arrays 的内部类 ArrayList,而不是 java.util.ArrayList。
这个内部类 ArrayList 没有提供 add()、remove() 等方法,因为它的大小是固定的。如果使用这些方法会抛出 UnsupportedOperationException 异常。
如果需要使用 List 的 add()、remove() 等方法,可以将其转换为 java.util.ArrayList,如下所示:
```java
String[] array = {"a", "b", "c"};
List<String> list = new ArrayList<>(Arrays.asList(array));
list.add("d");
list.remove(1);
```
这样就可以使用 List 的 add()、remove() 等方法了。
import java.uti
这段代码是不完整的,无法确定要导入的是java.util包中的哪个类或接口。正确的导入java.util包中所有类和接口的语句应该是:
```import java.util.*;```
这样可以导入该包中的所有类和接口,包括常用的ArrayList、HashMap、Date等类,以及提供了各种实用工具方法的Arrays、Collections等类。