[英][Novice][Java] Object is null somehow
我做了一個小程序來生成隨機音符。 我收到以下錯誤:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.ArrayList.add(Object)" because ".llaveFa" is null at sollasidore_14_9.main(sollasidore_14_9.java:99)
我在第 71 行使用了 new ,所以我不明白。
代碼是:
import java.util.concurrent.ThreadLocalRandom;
import java.lang.Integer;
import java.util.ArrayList;
class Nota {
/*
* private final static int[] notas = {
1, //C3=1,
2, //D3=2,
3, //E3=3,
4, //F3=4,
5, //G3=5,
6, //A3=6,
7, //B3=7,
8, //C4=8,
9, //D4=9,
10,// E4=10,
11,// F4=11,
12,// G4=12,
13,// A4=13,
14,// B4=14,
15,// C5=15,
16,// D5=16,
17,// E5=17,
18,// F5=18,
19,// G5=19,
20,// A5=20,
21// B5=21;
};
*/
int C3,D3,E3,F3,G3,A3,B3,C4,D4,E4,F4,G4,A4,B4,C5,D5,E5,F5,G5,A5,B5;
ArrayList<Integer> llaveSol, llaveFa;
}
class NotaStr {
final static String[] notas = {
"C3",
"D3",
"E3",
"F3",
"G3",
"A3",
"B3",
"C4",
"D4",
"E4",
"F4",
"G4",
"A4",
"B4",
"C5",
"D5",
"E5",
"F5",
"G5",
"A5",
"B5"
};
}
// sollasidore <iteraciones> <repetición>
// int boolean: 1 con, 0 sin.
// 14 notas llave de sol
// 9 notas llave de fa
public class sollasidore_14_9
{
public static void main(String[] args)
{
Nota llaveObj = new Nota();
int randomNum=0;
int randomNumPrev=0;
int count=0;
// valores entrada
//int repeticion = Integer.parseInt(args[1]);
//int iter = Integer.parseInt(args[0]);
int repeticion = 0;
int iter = 150;
//LLave de Fa
for(;count<iter ;count++) {
//Returns a pseudorandom int value between the specified
//origin (inclusive) and the specified bound (exclusive).
//nextInt(int origin, int bound)
// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
randomNum = ThreadLocalRandom.current().nextInt(1, 6 + 1);
if(!(repeticion==1)) {
while ((randomNum == randomNumPrev) )
randomNum = ThreadLocalRandom.current().nextInt(1, 6 + 1);
}
llaveObj.llaveFa.add(randomNum);
switch (randomNum) {
case 1:
llaveObj.C3++;
break;
case 2:
llaveObj.D3++;
break;
case 3:
llaveObj.E3++;
break;
case 4:
llaveObj.F3++;
break;
case 5:
llaveObj.G3++;
break;
case 6:
llaveObj.A3++;
break;
case 7:
llaveObj.B3++;
break;
}
randomNumPrev=randomNum;
}
//LLave de Sol
for(count = 0;count<iter ;count++) {
//Returns a pseudorandom int value between the specified
//origin (inclusive) and the specified bound (exclusive).
//nextInt(int origin, int bound)
// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
randomNum = ThreadLocalRandom.current().nextInt(8, 20 + 1);
if(!(repeticion==1)) {
while ((randomNum == randomNumPrev) )
randomNum = ThreadLocalRandom.current().nextInt(8, 20 + 1);
}
llaveObj.llaveSol.add(randomNum);
switch(randomNum){
case 8:
llaveObj.C4++;
break;
case 9:
llaveObj.D4++;
break;
case 10:
llaveObj.E4++;
break;
case 11:
llaveObj.F4++;
break;
case 12:
llaveObj.G4++;
break;
case 13:
llaveObj.A4++;
break;
case 14:
llaveObj.B4++;
break;
case 15:
llaveObj.C5++;
break;
case 16:
llaveObj.D5++;
break;
case 17:
llaveObj.E5++;
break;
case 18:
llaveObj.F5++;
break;
case 19:
llaveObj.G5++;
break;
case 20:
llaveObj.A5++;
break;
case 21:
llaveObj.B5++;
break;
}
randomNumPrev=randomNum;
}
Juntar(llaveObj);
}
public static void Juntar(Nota llaveObj) {
int e = 0;
int i = 0;
for (; i < llaveObj.llaveSol.size(); i++){
System.out.print(NotaStr.notas[llaveObj.llaveSol.get(i)]+" ");
if((i+1) % 25 == 0 && i != 0) {
System.out.println("");
for (; e < llaveObj.llaveFa.size(); e++){
System.out.print(NotaStr.notas[llaveObj.llaveFa.get(e)]+" ");
if((e+1) % 25 == 0 && e != 0) {
System.out.println("");
System.out.println("");
e++;
break;
}
}
}
}
System.out.printf("C3:%d D3:%d E3:%d F3: %d G3:%d A3:%d B3:%d\n"+
"C4:%d D4:%d E4:%d F4:%d G4:%d A4:%d B4:%d"+
"C5:%d D5:%d E5:%d G5:%d F5:%d A5:%d B5:%d\n", llaveObj.C3, llaveObj.D3, llaveObj.E3, llaveObj.F3, llaveObj.G3, llaveObj.A3, llaveObj.B3, llaveObj.C4, llaveObj.D4, llaveObj.E4, llaveObj.F4, llaveObj.G4, llaveObj.A4, llaveObj.B4, llaveObj.C5, llaveObj.D5, llaveObj.E5, llaveObj.F5, llaveObj.G5, llaveObj.A5, llaveObj.B5);
}
}
這一行的錯誤llaveObj.llaveFa.add(randomNum);
來自llaveFa
的未初始化。 讓我解釋一下,在“Nota” class 中,您在這一行中聲明ArrayList<Integer> llaveSol, llaveFa;
llaveFa 和 llaveSol 使用 null 初始化,要解決此問題,您可以在 class 本身中初始化變量,如下所示: ArrayList<Integer> llaveFa = new ArrayList<Integer>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.