Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.lang.NullPointerException_Java - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.NullPointerException

“线程中的异常”;“主要”;java.lang.NullPointerException,java,Java,我昨天开始学习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;

我昨天开始学习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");
        }
    }
}
import java.util.*;
类对{
int第一,第二;
配对(){
第一个=第二个=0;
}
公共无效生成对(整数a、整数b)
{
第一个=a;
第二个=b;
}
}
公共级aaaa{
公共静态void main(字符串[]idontneedthis)
{
扫描仪输入=新扫描仪(System.in);
int N=input.nextInt(),i,lg=0;
int[]A=新int[5010];
对[]B=新对[5010];

对于(N您需要初始化数组中的对:

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
不相关,因此可以根据N获取ArrayIndexOutOfBoundException

    pair[] B = new pair[5010];
仅为
5010
B
元素分配空间。您需要实例化该数组中的每个元素

for(int i = 0; i <B.length;i++)  
{  
    B[i] = new pair();
}
替换为:

import java.util.Scanner;

我就是这样写的。说得越少越好;)

import java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
类对{
第一,第二;
配对(整数第一,整数第二){
this.first=first;
这个秒=秒;
}
@凌驾
公共字符串toString(){
返回第一个+“”+第二个;
}
}
公共班机{
公共静态void main(字符串…忽略){
扫描仪输入=新扫描仪(System.in);
int numOfPairs=input.nextInt();
列表对=新的ArrayList();
for(int i=0;i
类应该以大写字母开头!@JpBond correction应该但是,如果没有B[++lg]=new pair()如何初始化它们;//这是?你的意思是什么?你需要循环数组中的项并逐个初始化它们。@user1948703你必须以某种方式初始化它。Woot4Moo的答案是另一种选择,但这更好。是的,我现在明白了,但循环所有项是唯一的解决方案?@user1948703如果你想初始化它们,是的。@user1948703抱歉忘了包括它,是的,它将是import java.util.Scanner;谢谢,我会记住它的!
import java.util.Scanner;
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);
    }
}