У меня есть класс с именем SNMPv3, как показано ниже. Когда я пытаюсь вызвать функцию mergeParameters() из экземпляра этого класса, возникают некоторые странные вещи.Я нашел ошибку в отладчике IDEA
class SNMPv3{
String[] names={"value1",
"value2",
"value3",
"value4",
"value5",
"value6"};
Map<String,String> map = new HashMap<String,String>();
void mergeParameters(ArrayList<SNMPv3> snmpv3List)
{
for(String parametername : this.map.keySet())
{
String parametervalue="";
for(SNMPv3 row : snmpv3List)
{
if(!row.equals(this))
{
if(parametervalue.equals(""))
{
parametervalue = row.map.get(parametername);
}
else if(parametervalue.equals(row.map.get(parametername)))
{
this.map.put(parametername, "");
for(SNMPv3 rowinside : snmpv3List)
{
if(!rowinside.equals(this))
{
this.map.put(parametername,this.map.get(parametername) + rowinside.map.get(parametername));
}
}
}
}
}
}
}
}
Во время компиляции, когда компилятор приходит в эту линию, когда «строка» и «это» показывает тот же самый объект
if(!row.equals(this))
он должен перейти к следующей итерации, но это не так. Странно идет по этой линии:
this.map.put(parametername,this.map.get(parametername) + rowinside.map.get(parametername));
Я не понял почему? Btw Я уже проверил фигурные скобки.
Затем я попытался добавить еще, чтобы этот странный, если:
class SNMPv3{
String[] names={"value1",
"value2",
"value3",
"value4",
"value5",
"value6"};
Map<String,String> map = new HashMap<String,String>();
void mergeParameters(ArrayList<SNMPv3> snmpv3List)
{
for(String parametername : this.map.keySet())
{
String parametervalue="";
for(SNMPv3 row : snmpv3List)
{
if(!row.equals(this))
{
if(parametervalue.equals(""))
{
parametervalue = row.map.get(parametername);
}
else if(parametervalue.equals(row.map.get(parametername)))
{
this.map.put(parametername, "");
for(SNMPv3 rowinside : snmpv3List)
{
if(!rowinside.equals(this))
{
this.map.put(parametername,this.map.get(parametername) + rowinside.map.get(parametername));
}
}
}
}
else{
System.out.println("Isnt it strange?");
}
}
}
}
}
Тогда это работает вполне нормально. Может кто-нибудь объяснить, почему, черт возьми, это происходит?
Довольно смелое заявление для заголовка. Вместо этого вы должны использовать заголовок для описания проблемы. – Sundeep
«Во время компиляции, когда компилятор входит в эту строку, когда« строка »и« это »показывает тот же объект» - во время компиляции строка 'row' не имеет значения; это просто переменная. Из-за этого ваш вопрос трудно понять. Не могли бы вы опубликовать краткую, но полную программу, демонстрирующую проблему? (Избавьтесь от чего-то неактуального и убедитесь, что мы можем его компилировать и запускать без него.) –
Это очень грязный код для отладки. Можете ли вы представить меньший пример, демонстрирующий эту так называемую ошибку? –