我昨天开始学习java并且编写了followind程序,它应该打印相同数字的对,但是当我运行它时我得到了
Exception in thread "main" java.lang.NullPointerException
at _aaaa.main(_aaaa.java:26)
这是我的计划:
import java.util.*;
class pair {
int first, second;
pair() {
first = second = 0;
}
public void make_pair(int a, int b)
{
first = a;
second = b;
}
}
public class aaaa {
public static void main(String[] idontneedthis)
{
Scanner input = new Scanner(System.in);
int N = input.nextInt(), i, lg = 0;
int[] A = new int[5010];
pair[] B = new pair[5010];
for (N <<= 1, i = 1; i <= N; ++i)
{
int var = input.nextInt();
if (A[var] > 0)
{
B[++lg].make_pair(A[var], var);
A[var] = 0;
}
else
{
A[var] = i;
}
}
if (lg == 0) System.out.print("-1");
for (i = 1; i <= lg; ++i)
{
System.out.print(B[i].first + " " + B[i].second + "\n");
}
}
}
请告诉我有什么问题或为什么我会收到此错误。我提到如果我剪切第26行(B[++lg].make_pair(A[var], var);
),它将写入-1。
谢谢!
答案 0 :(得分:4)
您需要初始化数组中的对:
if (A[var] > 0) {
B[++lg] = new pair(); //here
B[lg].make_pair(A[var], var);
A[var] = 0;
}
这一行:
pair[] B = new pair[5010];
创建一个5010对的数组,但在你初始化它们之前,它们都是空的。
另请注意,由于5010
和N
无关,因此您可能会获得一个ArrayIndexOutOfBoundException,具体取决于N.
答案 1 :(得分:3)
这就是我写它的方式。越少越好;)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Pair {
final int first, second;
Pair(int first, int second) {
this.first = first;
this.second = second;
}
@Override
public String toString() {
return first + " " + second;
}
}
public class Main {
public static void main(String... ignored) {
Scanner input = new Scanner(System.in);
int numOfPairs = input.nextInt();
List<Pair> pairs = new ArrayList<Pair>();
for(int i = 0; i < numOfPairs;i++) {
int first = input.nextInt();
int second = input.nextInt();
pairs.add(new Pair(first, second));
}
for (Pair pair : pairs)
System.out.println(pair);
}
}
答案 2 :(得分:2)
pair[] B = new pair[5010];
仅为5010
B
元素分配空格。您需要实例化该数组中的每个元素。
for(int i = 0; i <B.length;i++)
{
B[i] = new pair();
}
风格的东西:
班级名称以大写字母开头:AAAA
而不是aaaa
明星进口也很糟糕:
import java.util.*;
替换为:
import java.util.Scanner;