使用Java中的Map Entry获取错误

时间:2017-10-23 13:14:48

标签: java dictionary

这是我编写的代码

import java.util.*;

public class Program
{
    public static void main(String[] args) {

        Map <Integer,String> map = new HashMap <Integer,String>();  

        map.put(100,"Amit");  
        map.put(101,"Vijay");  
        map.put(102,"Rahul");

        Set set = map.entrySet();
        Iterator i = set.iterator();
        Map.Entry hello;

        while (i.hasNext()) {
            hello = (Map.Entry) i.next();
        }

        System.out.println (hello.getValue());
    }
}

我希望输出为&#34; Rahul&#34;,而是我在println语句中收到错误,表明变量hello可能尚未初始化

4 个答案:

答案 0 :(得分:2)

如果未输入循环,变量hello将不会初始化,这就是编译器中出现错误的原因,因此更改行:

Map.Entry hello;

Map.Entry hello = null;

答案 1 :(得分:1)

在使用之前,必须初始化局部变量 要解决此问题,请将其设置为null。如果仅在while中使用变量,您也可以在while语句中声明变量。

此外,您应该支持泛型类型到原始类型 它会像你一样阻止不安全的强制转换,并使你的代码更加健壮。

Map.Entry<Integer,String> entry = null;
while (i.hasNext()) {
   entry = i.next();  
    ...
}

答案 2 :(得分:0)

您收到此错误the variable _hello_ might not have been initialized的原因是因为变量hello从未初始化,并且可能存在Map为空的情况,在这种情况下它永远不会进入while循环。

如果你真的想深入研究这个问题,Java语言规范的一整章专门讨论Definite Assignment的问题。例如:

  

规则不接受变化:

void flow(boolean flag) {
  int k;
  if (flag)
    k = 3;
  if (!flag)
    k = 4;
System.out.println(k);  // k is not "definitely assigned" before here
}
  

因此编译此程序必然会导致编译时错误。

同样在你的情况下,变量hello永远不会被初始化。将其初始化为null将解决您的问题。

答案 3 :(得分:-1)

您的代码应该是

import java.util.*;

public class Program
{
    public static void main(String[] args) {

        Map <Integer,String> map = new HashMap <Integer,String>();

        map.put(100,"Amit");
        map.put(101,"Vijay");
        map.put(102,"Rahul");

        Set set = map.entrySet();
        Iterator i = set.iterator();
        Map.Entry hello = null;

        while (i.hasNext()) {
            hello = (Map.Entry) i.next();
            System.out.println (hello.getValue());
        }

    }
}

现在您将看到地图的所有名称。 :)