在Processing中出现NullPointerException,找不到错误

时间:2013-12-21 12:14:59

标签: nullpointerexception processing

所以我正在创建一个简单的小程序,IDE在此行抛出NullPointerException(http://puu.sh/5TJLZ.png):total[0] = calc(coins[0],coins[1],coins[2]); 请注意,void setupCoins()String calc()位于不同的标签中,而不是标签的一部分。

int[] coins;
String[] total;

void setup(){
  size(100,100);
  setupCoins();
  total[0] = calc(coins[0],coins[1],coins[2]);
  saveStrings("data/balance.txt",total);
}

void setupCoins(){

  String[] imports = loadStrings("balance.txt");
  String[] numbers = split(imports[0],',');
  coins = int(numbers);
}

String calc(int gold, int silver, int copper){

  for(int i = 0; i <= copper; i++){
    if(copper>9){
      copper=copper-10;
      silver++;
    }
  }

  for(int i = 0; i <= silver; i++){
    if(silver>9){
      silver=silver-10;
      gold++;
    }
  }

  fill(#F5EE0A);
  ellipse(20,20,10,10);

  fill(#AFAFAF);
  ellipse(20,45,10,10);

  fill(#AA5C46);
  ellipse(20,70,10,10);

  fill(#000000);
  text(gold + " Gold",30,25);
  text(silver + " Silvers",30,50);
  text(copper + " Coppers",30,75);

  return gold + "," + silver + "," + copper;

}

1 个答案:

答案 0 :(得分:1)

如果使用调试器,则可以在该行上停止并查看实际上null的对象。如果我猜,它可能是total[0],因为我没有看到你在哪里初始化。

在此声明

String[] total;

但是你从来没有将它初始化为一个值。该声明行不告诉编译器,例如,数组应该有多少个元素。所以它没有任何。但是你试着访问一个元素:

total[0] = ...

total[0]是数组中没有元素的第一个元素,因此它不存在。将此与初始化其他阵列的位置进行对比:

String[] imports = loadStrings("balance.txt");
String[] numbers = split(imports[0],',');

方法loadStrings()split()可能会返回有效数组,因此会为importsnumbers分配有效数组的值。永远不会为total分配这样的值。