Я пытаюсь написать простую программу диеты, используя карты с этим кодом. Но я продолжаю получать NPE
, который постоянно прерывает процесс.Получение «java.lang.NullPointerException» при работе с картами
Что не так с моим кодом? Почему я продолжаю получать эту ошибку и как ее исправить?
class Diet {
public static void main(String[] args) {
Map < Integer, String > FandVMap = new HashMap < Integer, String > (15);
FandVMap.put(1, "A bowl of Salad");
/* .
.
.
*/
FandVMap.put(12, "A Banana");
//************************************************************
Map < String, Integer > CaloryMap = new HashMap < String, Integer > (30);
CaloryMap.put("An Orange", 30);
.
.
.
CaloryMap.put("A bowl of Salad", 30);
Random randomGenerator = new Random();
randomGenerator = new Random();
int i = 0;
//int rand;
while (true) {
Integer rand = 0;
rand = randomGenerator.nextInt(12);
String name = FandVMap.get(rand);
System.out.println(name);
Integer Calory = 0;
Calory = CaloryMap.get(name); // This is where the problem occurs. <<========
int Sum=0;
Sum=Sum+Calory.intValue();
System.out.println(Sum);
if (Sum > 1000) {
break;
}
}
}
}
А вот выход я получаю:
A Peach
50
null
A bowl of Salad
30
A Nectarine
50
java.lang.NullPointerException
at Diet.main(gadas.java:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
Calory
Сумма не работает либо.
Потому что ваш 'CaloryMap' не есть ценность, которую вы ожидаете. Убедитесь, что все имена из «FandVMap» представлены в «CaloryMap». – cybersoft
Если вы хотите сопоставить небольшое порядковое целое значение с String, использование 'HashMap' является излишним. Для этого есть структура, и это называется «массив». –
Вы никогда не покинете цикл while, потому что ваша сумма всегда будет обнулена – ha9u63ar