如何解决java.lang.NullPointerException?

如何解决java.lang.NullPointerException?,java,nullpointerexception,null,Java,Nullpointerexception,Null,这是我为snake和ladder编写的代码。请帮助我排除异常。例外情况在第72行和第114行。我已经用注释突出显示了导致异常的行。提前感谢您的帮助 package practical1; import java.io.Console; import java.util.ArrayList; import java.util.Scanner; public class snakeandladder1 { int totalpos=100; int v=0; int[] scores;

这是我为snake和ladder编写的代码。请帮助我排除异常。例外情况在第72行和第114行。我已经用注释突出显示了导致异常的行。提前感谢您的帮助

 package practical1;

 import java.io.Console;
 import java.util.ArrayList;
 import java.util.Scanner;

public class snakeandladder1 {

int totalpos=100;
int v=0;
int[] scores;
int score=0;
int l=0;

public int throwdice()
{
    int i=0;
    {
        while(i==0)
        {
            i=(int)Math.random()*100;
            i=i%13;
        }
        return i;
    }
}

public int ladder(int score)
{
    if(score==15)
        score=30;
    else if(score == 45)
        score=71;
    else if(score == 25)
        score=62;
    else if(score == 81)
        score=91;
    else if(score == 9)
        score=39;
    scores[l]=score;
    return score;
}

public int snake(int score)
{
    if(score == 29)
        score=11;
    else if(score == 81)
        score=48;
    else if(score == 92)
        score=71;
    else if(score == 30)
        score=6;
    else if(score == 58)
        score=19;
    scores[l]=score;
    return score;
}

void start()
{
    System.out.println("Enter the number of players:");
    Scanner in=new Scanner(System.in);
    int n=in.nextInt();
    in.close();
    l=n;
    System.out.println("Enter Players names in order:");
    ArrayList<String> name1=new ArrayList<String>();
    for (int i=0;i<n;i++)
    {
        Console in1=System.console();
        String name2=in1.readLine(); //---- I am getting this null pointer exception here.
        name1.add(name2);
    }
    while(true)
    {
        while(l>0)
        {
            System.out.println("Click y to roll dice %d"+(l+1));
            Console in2=System.console();
            String yes=in2.readLine();
            if (yes == "y")
            {
                v=throwdice();
            }
            score = scores[l]+v; ((//--- the null pointer exception after changing all user input         to  scanner))
            if(score==totalpos)
            {
                System.out.println("User:"+name1.get(l)+" got "+v+".Winner!!!");
                break;
            }
            else if(score > totalpos)
            {
                scores[l]=scores[l];
            }
            int s1;
            s1=ladder(score);
            if(s1==score)
            {
                snake(score);
            }
            System.out.println("Current score of"+name1.get(l)+"is:"+scores[l]);
            l--;
        }
        if(l==0)
        {
            l=n;
        }
    }
}
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
    snakeandladder1 sal=new snakeandladder1();  ((//null pointer exception here as well after the changes))
    sal.start();   //------ i am getting this null pointer exception here 
}
packagepractical1;
导入java.io.Console;
导入java.util.ArrayList;
导入java.util.Scanner;
公营蛇梯1{
int totalpos=100;
int v=0;
int[]分数;
智力得分=0;
int l=0;
公共int throwdice()
{
int i=0;
{
而(i==0)
{
i=(int)Math.random()*100;
i=i%13;
}
返回i;
}
}
公共智力阶梯(智力分数)
{
如果(分数=15)
得分=30分;
否则如果(分数=45)
得分=71分;
否则如果(分数=25)
得分=62分;
否则如果(分数=81)
得分=91分;
否则如果(分数=9)
得分=39分;
分数[l]=分数;
返回分数;
}
公众智力(智力分数)
{
如果(分数=29)
得分=11分;
否则如果(分数=81)
得分=48分;
否则如果(分数=92)
得分=71分;
否则如果(分数=30)
得分=6分;
否则如果(分数=58)
得分=19分;
分数[l]=分数;
返回分数;
}
void start()
{
System.out.println(“输入玩家数量:”);
扫描仪输入=新扫描仪(系统输入);
int n=in.nextInt();
in.close();
l=n;
System.out.println(“按顺序输入玩家姓名:”);
ArrayList name 1=新的ArrayList();
对于(int i=0;i0)
{
System.out.println(“单击y滚动骰子%d”+(l+1));
consolein2=System.Console();
字符串yes=in2.readLine();
如果(是==“y”)
{
v=杂音();
}
score=scores[l]+v;((//--将所有用户输入更改为扫描仪后的空指针异常))
如果(分数==总位置)
{
System.out.println(“用户:“+name1.get(l)+”get“+v+”.Winner!!!”;
打破
}
否则如果(分数>总积分)
{
分数[l]=分数[l];
}
int s1;
s1=阶梯(分数);
如果(s1==分数)
{
蛇(分数);
}
System.out.println(“当前“+name1.get(l)+”的分数为:“+scores[l]);
l--;
}
如果(l==0)
{
l=n;
}
}
}
公共静态void main(字符串[]args)引发异常{
//TODO自动生成的方法存根
snakeandladder1 sal=new snakeandladder1();(//此处为空指针异常,更改后也是如此))
sal.start();//----我在这里得到这个空指针异常
}
}

请注意,在上述代码
close()
中,方法不仅会关闭
扫描仪
对象本身,还会关闭其下划线流(即键盘输入)。这发生在
系统中的
和实现
可读的所有其他源中

发件人:

当扫描仪关闭时,如果输入源 实现可关闭接口

我的建议是:

  • 删除.close()中的
  • 使用
    name2=in.readLine()

尝试
新扫描仪(System.in)
从标准输入流读取输入。Read-返回与当前Java虚拟机关联的唯一控制台对象(如果有),否则
null
。您可以共享完整的堆栈跟踪吗?为什么在
中使用
,在
中使用
?两个对象获得本质上相同的东西(从控制台输入)。。。在
中使用
,并将该
放在1中
搜索此站点以查找“如何读取堆栈跟踪”。只需使用您已有的扫描仪,但不要关闭它。嗨…谢谢您的帮助。我已清除这些内容并了解sacanner对象的工作原理。这是堆栈跟踪:输入玩家数量:2按顺序输入玩家名称:线程中的异常practical1.snakeandladder1.main(snakeandladder1.java:114)处的practical1.snakeandladder1.start(snakeandladder1.java:72)处的“main”java.lang.NullPointerException嗨…现在我遇到了另一个问题…其他两行也出现了同样的问题..第83行和第115行..这是堆栈跟踪:输入玩家数量:2按顺序输入玩家名称:kishan raghav单击y在线程“main”java.lang.NullPointerException中掷骰子%d3 y practical1.snakeandladder1.start处出现异常(snakeandladder1.java:85)在practical1.snakeandladder1.main(snakeandladder1.java:113)我不明白的是如何清除此异常。此异常适用于null pionter变量或对象,但我尚未将任何变量或对象分配为null。请帮助…您是否执行了我的建议?如果是,请发布更新后的代码以及更新后仍然收到的任何错误/异常。(所有这些信息都需要在您的帖子中,而不是在评论中)。
Scanner in=new Scanner(System.in);
int n=in.nextInt();
in.close();