这是我编写的代码
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
可能尚未初始化
答案 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());
}
}
}
现在您将看到地图的所有名称。 :)