#java
#java
Вопрос:
Итак, у меня возникли проблемы при попытке обернуть мою голову вокруг этой проблемы с кодированием: вот четыре вопроса, на которые они хотят, чтобы я ответил: Сколько раз ‘GetValue (…)’ будет выполняться со следующими входными данными, и каков будет результат?
(1) GetValue(«foo», 0);
(2) GetValue(«bar», 2);
(3) GetValue(«база», 0);
(4) GetValue(«fubar», 1);
Я знаю первые два ответа:
1) будет выполнен один раз и вернет 1
2) выполняется 1 раз и возвращает 3, но последние две проблемы (3,4) я не понимаю. Кто-нибудь может помочь уточнить, что именно делает этот код, и подсказать, каковы ответы?
Вот код:
import java.util.HashMap;
import java.util.Map;
public class myClass {
private Map<String,Integer> map;
public myClass() {
map = new HashMap<>();
map.put("foo", 1);
map.put("bar", 3);
}
public int getValue(String input, int numRetries) throws Exception {
try {
return map.get(input);
}
catch (Exception e) {
if (numRetries > 3) {
throw e;
}
return getValue(input, numRetries 1);
}
}
Заранее благодарю вас.
Комментарии:
1. Хитрость заключается в том, чтобы знать, что
HashMap.get()
делает для элемента, которого нет на карте.2. Учтите, что a
Map
может содержать толькоInteger
значения, ноgetValue
его нужно возвращатьint
.3. @John3136 Привет, Джон, я признаю, что это была одна из проблем, над которой я упорно боролся и проводил исследования. Не зная, что делает Hashmap.get(), когда элемента нет на карте
Ответ №1:
Код, на который вы правильно ответили в (1) и (2), пытается получить значение из HashMap с учетом его ключа.
Функция GetValue () является рекурсивной функцией, что означает, что она вызывает себя несколько раз на основе значения ‘numRetries’
(3) codes вызывает себя 4 раза (где количество попыток увеличивается с 0,1,2,3 до того, как предложение ‘> 3’ становится истинным и генерируется исключение)
(4) codes вызывает себя 3 раза (где количество попыток увеличивается с 1,2,3 до того, как предложение ‘> 3’ становится истинным и генерируется исключение)
Комментарии:
1. Большое вам спасибо! Я думаю, что я начинаю это понимать. Я думаю, что я просто слишком сильно продумал вопрос! Ха-ха.