簡體   English   中英

無法找出空指針異常

[英]Cant figure out the null pointer exception

請幫助我找出空指針異常。 我無法理解哪個變量或對象為null。該如何解決?

package coll.org;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Scanner;

public class SnakeAndladder1 {
ArrayList<String> name1=new ArrayList<String>(); //an array to store players names

public int throwdice() //to calculate the dice value
{
    return (int)(Math.random()*6)+1;
}

public int ladder(int curscore)
{
    Hashtable ld = new Hashtable();
    ld.put(15,30);
    ld.put(45,71);
    ld.put(25,62);
    ld.put(81,91);
    ld.put(9,39);
    Object v=ld.get(curscore);
    return (int)v;
}
public int snake(int curscore)
{
    Hashtable ld = new Hashtable();
    ld.put(29,11);
    ld.put(81,48);
    ld.put(30,6);
    ld.put(92,71);
    ld.put(58,19);
    Object v=ld.get(curscore);
    return (int)v;
}


public boolean Game (String name1){
    int score=0;
    String name;
    int v=0;
    name=name1.toString();
        System.out.println("Click y to roll dice");
        Scanner in2=new Scanner(System.in);
        String yes=in2.nextLine();
        if(yes.equalsIgnoreCase("y"))
        {
            v=throwdice();
            System.out.println("dice value:"+v);
        }
        score=score+v;
        if(score==100)
        {
            System.out.println("User:"+name+"got"+v+".Winner!!!");
            return false;
        }
        if (score>100)
        {
            score=score-v;
            System.out.println("Current score of"+name+"is"+score);
            return true;
        }

        int s1=ladder(score);
        if(s1==score)
        {
            score=snake(score);
            System.out.println("Current score of"+name+"is"+score);
            return true;
        }
        else
        {
            score=s1;
            System.out.println("Current score of"+name+"is"+score);
            return true;
        }


}

public static void main(String[] args) {
// TODO Auto-generated method stub
int l=0;
boolean flag=true;
System.out.println("Enter the number of players:");
Scanner in=new Scanner(System.in);
int n=in.nextInt();
System.out.println("Enter Players names in order:");
ArrayList<String> name1=new ArrayList<String>(); //an array to store players names
for (int i=0;i<n;i++)
{
    Scanner in1=new Scanner(System.in);
    String name2=in1.nextLine();
    name1.add(name2);
}

SnakeAndladder1 players[];
players = new SnakeAndladder1[n];
while(flag)
  {
    while(l<n)
    {
        flag = players[l].Game(name1.get(l)); //----Error occuring here.Its a null pointer 
    }                                                exception
  }
 }
}

堆棧跟蹤為:

Enter the number of players:
3
Enter Players names in order:
raghav
kishan
sr
Exception in thread "main" java.lang.NullPointerException
    at coll.org.SnakeAndladder1.main(SnakeAndladder1.java:107)

以下代碼使用n null初始化數組:

players = new SnakeAndladder1[n];

為了避免NPE,您需要先在對象上調用Game()之前創建對象。

SnakeAndladder1 players[];
players = new SnakeAndladder1[n];

在上面添加以下內容:

for(int i = 0; i < players.length; i++)
{
    players[i] = new SnakeAndladder1();
}

這將在數​​組的每個元素處初始化一個對象。

在這種情況下, n是空值,因為您是從用戶那里獲取值的。 因此,它不會將數組創建為有限數組。 它們都是空的。

嘗試首先從用戶初始化數字,然后初始化數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM