检查数字是否包含在 ArrayList 中的方法将不起作用,NullPointerExcepton。您可以在构造方法中使用 ArrayList 方法吗?

Method to check if number is contained in ArrayList will not work, NullPointerExcepton. Can you use ArrayList method inside a constructed method?

这是我正在做的一个项目,它应该从用户那里获取输入,然后输入区号,然后查看它是否包含在数组列表中。我创建的方法在另一个 class 中不起作用,我不确定为什么,它返回 NullPointerException。

NullPointerException 显示在这行代码中:if (mountainTime.contains(input))

这是class的搭配方法

    package finalPro;

import java.util.ArrayList;

public class Final 
{


    public Final()
    {
        input = 0;
        timezone = 0;
    }

    public void checkIfTrue(int y)
    {
        input = y;

        if (mountainTime.contains(input))
        {
            timezone = 1;

        }
        else
            timezone = 0;
        System.out.println(timezone);
    }

    public int getZone()
    {
        return timezone;
    }

public ArrayList<Integer> mountainTime;
private int input;

private int timezone;

}

这里是测试class

package finalPro;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class FinalLogic 
{
    public static void main(String[] args)
    {

            ArrayList<Integer> mountainTime = new ArrayList<Integer>();
            mountainTime.add(480);
            mountainTime.add(602);
            mountainTime.add(623);          //Arizona area codes
            mountainTime.add(928);
            mountainTime.add(520);

            mountainTime.add(303);
            mountainTime.add(719);          //Colorado
            mountainTime.add(720);
            mountainTime.add(970);

            mountainTime.add(406);          //Montana

            mountainTime.add(505);          //New Mexico
            mountainTime.add(575);

            mountainTime.add(385);
            mountainTime.add(435);          //Utah
            mountainTime.add(801);

            mountainTime.add(307);          //Wyoming



        Final myMap = new Final();

        {

            String x = JOptionPane.showInputDialog("Please enter a number: ");

            int input = Integer.parseInt(x);

            myMap.checkIfTrue(input);

        }
    }


}

我希望现在还不算太晚,我没有做任何特别的事情来修复你的代码,只是移动了一些代码, 删除了从 class FinalLogicFinal class 的初始化逻辑。(顺便说一句 Final 名字不是很好,你可能知道 final 是Java中的保留字。虽然你的名字区分大小写但仍然)

package finalPro;
import javax.swing.JOptionPane;

public class FinalLogic {
public static void main(String[] args) {

    Final myMap = new Final();
    String x = JOptionPane.showInputDialog("Please enter a number: ");
    int input = Integer.parseInt(x);
    myMap.checkIfTrue(input);

}
}

这是你的 class Final

package finalPro;
import java.util.ArrayList;

public class Final {

public Final() {
    input = 0;
    timezone = 0;
    // moved all initialization logic to constructor
    mountainTime = new ArrayList<>();
    mountainTime.add(480);
    mountainTime.add(602);
    mountainTime.add(623); // Arizona area codes
    mountainTime.add(928);
    mountainTime.add(520);
    mountainTime.add(303);
    mountainTime.add(719); // Colorado
    mountainTime.add(720);
    mountainTime.add(970);
    mountainTime.add(406); // Montana
    mountainTime.add(505); // New Mexico
    mountainTime.add(575);
    mountainTime.add(385);
    mountainTime.add(435); // Utah
    mountainTime.add(801);
    mountainTime.add(307); // Wyoming
}

public void checkIfTrue(int y) {
    input = y;

    if (mountainTime.contains(input)) {
        timezone = 1;

    } else
        timezone = 0;
    System.out.println(timezone);
}

public int getZone() {
    return timezone;
}

public ArrayList<Integer> mountainTime;
private int input;
private int timezone;

}

我在我的工作区试过,它没有给出 NPE,希望对你有帮助。