Когда я пытаюсь получить доступ к map.get (c) в цикле for (как показано в версии 2), он возвращает нулевое значение и устанавливает верхнюю границу равной нулю, что приводит к исключению нулевого указателя. С другой стороны, если я создаю конечную переменную и присваиваю ей значение map.get (c) (как показано в версии 1), она работает нормально. Итак, не могли бы вы объяснить, почему?
версия 1: отлично работает
int count=0;
int st=0;
string s = "abcabcbb";
Hashtable<Character, Integer> map = new Hashtable<Character, Integer>();
char[] str = s.toCharArray();
for(int i=0; i<str.length; i++){
char c = str[i];
if(map.get(c)==null){
map.put(c, i);
if(count < map.get(c) - st + 1){
count = map.get(c) - st + 1;
};
}
else {
int end = map.get(c); // End variable --> returns int value as expected
for(int j=st; j<=end; j++){
map.remove(str[j]);
st = j+1;
}
map.put(c,i);
}
}
System.out.println(count);
Версия 2: выдает исключение нулевого указателя
int count=0;
int st=0;
string s = "abcabcbb";
Hashtable<Character, Integer> map = new Hashtable<Character, Integer>();
char[] str = s.toCharArray();
for(int i=0; i<str.length; i++){
char c = str[i];
if(map.get(c)==null){
map.put(c, i);
if(count < map.get(c) - st + 1){
count = map.get(c) - st + 1;
};
}
else {
//int end = map.get(c); // End variable commented
for(int j=st; j<=map.get(c); j++){ // replaced end w map.get(c) --> returns null instead of int
map.remove(str[j]);
st = j+1;
}
map.put(c,i);
}
}
System.out.println(count);
Заранее спасибо за помощь!
Рохан.