Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Systax错误:“;“线程中的异常”;“主要”;java.lang.NullPointerException“;,我怎样才能修好它?_Java_Nullpointerexception - Fatal编程技术网

Systax错误:“;“线程中的异常”;“主要”;java.lang.NullPointerException“;,我怎样才能修好它?

Systax错误:“;“线程中的异常”;“主要”;java.lang.NullPointerException“;,我怎样才能修好它?,java,nullpointerexception,Java,Nullpointerexception,我正在尝试用java编写游戏2048,现在我只写了一行来理解它是如何工作的。使用 哈希图 和使用 洗牌 方法得到随机点的位置。当我运行代码时,它将随机数放在一个随机点上,但我也得到了语法错误, 线程“main”java.lang.NullPointerException中出现异常 这表明问题在我的模型课上 getValue(int行,int列) notificationToView() 错误指的是什么?我怎样才能修好它 import java.util.Random; import java.a

我正在尝试用java编写游戏2048,现在我只写了一行来理解它是如何工作的。使用 哈希图 和使用 洗牌 方法得到随机点的位置。当我运行代码时,它将随机数放在一个随机点上,但我也得到了语法错误, 线程“main”java.lang.NullPointerException中出现异常 这表明问题在我的模型课上 getValue(int行,int列) notificationToView() 错误指的是什么?我怎样才能修好它

import java.util.Random;
import java.awt.Point;
import java.util.Collections;
import java.util.HashMap;
import java.util.ArrayList;


public class Model  {

    View _view;

private HashMap<Point, Integer> _map;

    public Model(){
        _map = new HashMap<Point, Integer>();

        for(int i = 0; i < 4; i++)
            _map.put(new Point(0,i), -1);


}


/**
 * Assigns randomly generated int values to the 
 * variables of the model.
 */
public void notificationToView() {

        _map.put(getRandomPoint(), getRandom2OR4());

    _view.updateView();
}



public int getRandom2OR4(){
    Random r = new Random();

    if(r.nextInt() % 5 == 0 )    
        return 4;
    else
        return 2;               
}

public Point getRandomPoint(){  
    ArrayList<Point> unoccupied = new ArrayList<Point>();

    for (int i = 0; i < 4; i++)
    {
        if(_map.get(new Point(0,i)) == -1)
            unoccupied.add(new Point(0,i));
    }

    Collections.shuffle(unoccupied);
    Point random = unoccupied.get(0);

     return random;
}

public int getValue( int row, int column) {
    return  _map.get(new Point(row, column));
}


/**
 * Method that associates the a view as an observer
 * of the model.  Being an observer implies receiving
 * notifications when the data in the model changes.
 */
public void addObserver(View view) {
    _view = view;
}

}




public class View implements Runnable {
    private JFrame _frame;
    private JPanel _panel;
    private Model _model;
    private ArrayList<JButton> _list;

    public View(Model m){
        _model = m;


    }

  /**
   * This method updates the view based on the current
   * values stored in the data model.
   */
   public void updateView() {

        for(int i = 0; i < 4; i++){
            if(_model.getValue(0,i) != -1)
                _list.get(i).setText("" + _model.getValue(0, i));
            else 
                _list.get(i).setText("");
    }
    }

    @Override
    public void run() {

        _list = new ArrayList<JButton>();
        _frame = new JFrame("Lab7");
        _panel = new JPanel();

       // create 4 buttons

        for(int i = 0; i < 4; i++){

            JButton buttons = new JButton();
            _list.add(buttons);   

            _panel.add(_list.get(i));

            _list.get(i).setFont(new Font("Georgia", Font.PLAIN,40));
            _list.get(i).addKeyListener(new MyKeyEvent(_model)); 
import java.util.Random;
导入java.awt.Point;
导入java.util.Collections;
导入java.util.HashMap;
导入java.util.ArrayList;
公共类模型{
视图(u视图),;
私有HashMap\u映射;
公共模型(){
_map=新的HashMap();
对于(int i=0;i<4;i++)
_地图放置(新点(0,i),-1);
}
/**
*将随机生成的int值分配给
*模型的变量。
*/
public void notificationToView(){
_put(getRandomPoint(),getRandom2OR4());
_view.updateView();
}
public int getRandom2OR4(){
随机r=新随机();
if(r.nextInt()%5==0)
返回4;
其他的
返回2;
}
公共点getRandomPoint(){
ArrayList unoccubied=新建ArrayList();
对于(int i=0;i<4;i++)
{
if(_map.get(新点(0,i))=-1)
未占用。添加(新点(0,i));
}
收藏。洗牌(未占用);
点随机=未占用。获取(0);
返回随机;
}
公共int getValue(int行,int列){
返回_map.get(新点(行、列));
}
/**
*将视图关联为观察者的方法
*作为一个观察者意味着接受
*模型中的数据更改时的通知。
*/
公共void addObserver(视图){
_视图=视图;
}
}
公共类视图实现可运行{
私有JFrame _帧;
私人JPanel_小组;
私有模型(u模型),;
私有数组列表;
公众视野(m型){
_模型=m;
}
/**
*此方法基于当前视图更新视图
*存储在数据模型中的值。
*/
public void updateView(){
对于(int i=0;i<4;i++){
if(_model.getValue(0,i)!=-1)
_list.get(i.setText(“+_model.getValue(0,i));
其他的
_list.get(i).setText(“”);
}
}
@凌驾
公开募捐{
_列表=新的ArrayList();
_框架=新的JFrame(“Lab7”);
_panel=新的JPanel();
//创建4个按钮
对于(int i=0;i<4;i++){
JButton buttons=新JButton();
_列表。添加(按钮);
_panel.add(_list.get(i));
_list.get(i).setFont(新字体(“乔治亚”,普通字体,40));
_list.get(i).addKeyListener(新的MyKeyEvent(_模型));
}在方法中

公共int getValue(int行,int列)

执行
return\u map.get(新点(行、列));
您要求映射获取具有键的元素:

新点(行、列)

因此,映射查看其键的内部,并调用method.equals以知道您提供的键是否相同

因此,似乎您使用一些映射中不存在的行/列值调用该方法

在映射中找不到匹配元素,返回null

由于您的映射包含整数类,并且您的方法签名返回一个int,因此会发生outoboxing并创建一个nullPointerException,请尝试将null转换为int

因此,尝试替换:

return  _map.get(new Point(row, column));


从异常堆栈跟踪,导航到其出现的确切行-即指针为空的行-检查未初始化的变量,可能需要在操作之前对其进行初始化或执行空检查。异常不是语法错误,…语法错误禁止您编译代码,使其永远无法运行,…异常是在您的情况下,当运行时发生错误时抛出。我怀疑您使用的指针为NULL,这意味着您正在访问为系统保留的地址00000000:00000000处的内存,并且您没有对该地址的访问权限……我打赌您在分配之前正在使用
\u map
,或者为NULL objectGeneral调用getValue未初始化并访问变量时会发生ly Null指针异常。编译器通常会解释这种情况,并在适用的情况下显示错误。请检查变量的值。在pgm中使用变量之前,确保它们具有值。如有必要,请在声明时对其进行初始化。
Integer currentValue = _map.get(new Point(row, column));
if (currentValue != null){
  return currentValue
}
return -1;