Java中switch case局部变量未初始化报错解决方案咨询
为什么Java局部变量
hasil在switch外部输出会报未初始化错误? Java对局部变量的初始化有强制要求:局部变量没有默认值,必须在被使用前完成显式赋值,而且编译器会逐一检查所有可能的代码执行路径,只要存在任何一条路径会导致变量未赋值就被使用,就会抛出Local variable may have not been initialized错误。
看你的代码:
hasil是main方法内的局部变量,仅声明未初始化;- 当用户输入的是
+、-、*、/时,对应的case分支会给hasil赋值,后续输出没问题; - 但如果走
default分支,这里只打印了错误提示,完全没有给hasil赋值。此时程序会继续执行到switch外部的System.out.println(hasil),这就触发了编译器的检查——它发现存在“变量未赋值就被使用”的可能路径,所以直接报错。
至于把System.out.println(hasil)放到每个case分支里能正常运行,原因很简单:每个case分支里都是先给hasil赋值,再执行输出,所有能走到输出语句的路径中,hasil都已经被正确赋值,编译器找不到违规路径,自然不会报错。
解决办法(选其一即可)
- 声明时给
hasil一个默认值:int hasil = 0;; - 在
default分支里给hasil赋值,或者直接用return终止程序,避免执行到后续的输出语句:default: System.out.println("Operator tidak valid"); return; // 终止main方法,不会走到后面的输出
你的代码示例:
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Masukkan nilai a = "); int a = input.nextInt(); System.out.print("Masukkan nilai b = "); int b = input.nextInt(); System.out.print("Mau diapain bang angkanya? "); String o = input.next(); int hasil; switch (o) { case "+": hasil = a + b; break; case "-": hasil = a - b; break; case "*": hasil = a * b; break; case "/": hasil = a / b; break; default: System.out.println("Operator tidak valid"); } // Error is here, stating that I haven't initialized the variable System.out.println(hasil); } }
内容的提问来源于stack exchange,提问作者eevcxx
相关产品推荐
相关产品推荐

