Java Array索引问题

时间:2011-06-29 03:55:47

标签: java arrays nullpointerexception

cantmano是索引,它从0开始。另一种方法用cant ++增加。 我重新检查0< = cantmano< = 10

public void dibujar(){
    //actualiza la pantalla
    if (cantmano >= 0 && cantmano < 10 && cantcroupier >= 0 && cantcroupier < 10){
        TextView textomano = (TextView)findViewById(R.id.textView3);
        TextView textocroupier = (TextView)findViewById(R.id.textView5);
        CharSequence buffer = textomano.getText();

        textomano.setText( buffer + " " +
            String.valueOf(manojugador[cantmano].getPalo())+ " de " +
            String.valueOf(manojugador[cantmano].getNumero()) ); // <-- ERROR

        textocroupier.setText( String.valueOf(cantmano) );
    }
}

我得到了一个很好的

Caused by: java.lang.NullPointerException
    at com.pruebas.blackjack.blackjack.dibujar(blackjack.java:58)
    at com.pruebas.blackjack.blackjack.onCreate(blackjack.java:23)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2717)

编辑: .getNumero()返回带有请求的CARD值的int。 (扑克牌式) .getPalo()返回一个int,其中1 =钻石等

manojugador的初始化:

Carta manojugador[]= new Carta[10];

constructor of Carta:

public Carta(){
    int palo=0;
    int numero=0;
}

MIDNIGHT UPDATE: 通过一些改进,我设法让它克服了错误。但是现在数组在写入时具有全0值。这必须是一个容易解决的问题,但这是接受最佳答案之前的最后一步。

以下是添加卡片的方法:

public void hit(View v){
        //sacan cartas
        if (cantmano < manojugador.length){
        manojugador[cantmano]=mazo.darcarta(); //adds a random Card to the manojugador. mazo means deck.
        manocroupier[cantcroupier]=mazo.darcarta(); //adds a random Card to the manojugador. mazo means deck.
        cantmano++;
        cantcroupier++;
        }
        dibujar();
    }

2 个答案:

答案 0 :(得分:3)

您必须初始化数组它的元素。如果你只是这个:

Carta manojugador[]= new Carta[10];

然后数组的所有10个元素都是null。您还必须初始化每个元素。像这样:

for(int i=0, length=manojugador.length; i<length; i++) {
    manojugador[i] = new Carta();
}

更新

我在hit()方法中看到,我看到你有:

if (cantmano <= 8) {

不应该是:

if (cantmano < 10) {

甚至更好:

if (cantmano < manojugador.length) {

我认为导致NullPointerException的代码中发生的事情是manojugador[9]永远无法初始化。

答案 1 :(得分:2)

您的manojugador数组null元素和cantmano以某种方式指向其中一个null元素。

例如,假设你有:

ManoJugador [] cantmano = new ManoJugador[10];

cantmano[0] = new ManoJugador();
cantmano[1] = new ManoJugador();
cantmano[2] = new ManoJugador();

您在索引3之外的数组中有空值。这就是为什么当你试图获得null的数值时,你会得到NullPointerException。

修改

根据你的编辑:

Yeap,当然,那里你有一个空值。调试该部分,你会看到一些空值

提示:System.out.println( java.util.Arrays.toString( someArray ));

Suerte!