Java 使用变量,在switch语句中初始化,外部
我在访问switch语句中初始化的变量,然后在switch之外使用它们时遇到了一个问题 这就是我的代码应该产生的结果: 什么是:X(+-*或/)X 以下是我的Java代码:Java 使用变量,在switch语句中初始化,外部,java,variables,if-statement,switch-statement,Java,Variables,If Statement,Switch Statement,我在访问switch语句中初始化的变量,然后在switch之外使用它们时遇到了一个问题 这就是我的代码应该产生的结果: 什么是:X(+-*或/)X 以下是我的Java代码: import java.util.Random; import java.util.Scanner; public class Test2 { public static void main(String[]args){ Random rand = new Random();
import java.util.Random;
import java.util.Scanner;
public class Test2 {
public static void main(String[]args){
Random rand = new Random();
Scanner sc = new Scanner(System.in);
int svar, ans;
int tal1 = rand.nextInt(100) + 1;
int tal2 = rand.nextInt(100) + 1;
String characters = "+-*/";
int r = rand.nextInt(characters.length());
char randomChar = characters.charAt(r);
switch(randomChar){
case '+':
ans = tal1 + tal2;
break;
case '-':
ans = tal1 - tal2;
break;
case '*':
ans = tal1 * tal2;
break;
case '/':
ans = tal1 / tal2;
break;
}
System.out.println("What is: "+tal1+randomChar+tal2+"?");
svar = sc.nextInt();
if (svar == ans)
System.out.println("Correct!");
else
System.out.println("Wrong - Right answer: "+ans);
}
}
如您所见,“ans”已经声明并初始化。但是,我希望在if语句(为了比较结果)和输出中都使用ans变量
现在我可以扩展每种情况并编写if语句和输出,但是代码过于宽松,因为我正在尝试编写一个类似的代码,但是更小。这项工作如何进行,有什么建议吗
下面是我得到的编译错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The local variable ans may not have been initialized
The local variable ans may not have been initialized
at Test2.main(Test2.java:36)
添加
默认值
大小写以捕获任何无法识别的输入。在您的情况下,这可能会引发一个运行时异常
,因为如果达到这种情况,您的代码就会出现问题
default:
throw new RuntimeException("Unexpected operation: " + randomChar);
您收到的错误意味着存在无法初始化
ans
的代码路径。不要采取简单的方法,在声明时使用无意义的值初始化ans
!这只会隐藏有关代码实际问题的宝贵警告。局部变量(如ans
)必须在使用前初始化
所以只要给ans赋值零就行了如果你声明了一个局部变量(在函数内部),你应该总是初始化它
int svar = 0;
int ans = 0;
如果您在函数外部声明它,那么它将被自动初始化为0,但这不是一个好的做法,因为编译器不知道ans是否会被初始化,所以您会得到此编译错误, 原因是在编译时,不知道是否会执行开关条件,因此编译错误。要解决此问题,请将ans初始化为某些值,如:
ans = -1;
再看看这个,只需更改您的声明
intsvar,ans代码>到intsvar,ans=0
以删除此错误。问题是变量ans没有在这一行初始化:如果(svar==ans)
并且您的开关盒没有默认的盒。与实例变量不同,局部变量不会自动初始化
您需要显式地将其初始化为默认值
int svar, ans = 0; // assuming 0 is default value for ans
如果您的开关中的所有情况都失败
,则将永远不会初始化ans
。您在开关之前没有初始化ans
我不推荐erikson的答案,因为您的randomChar只会给您处理过的输入(您永远不会达到默认情况)。非常感谢,谢谢!因此,只有在默认情况不可行的情况下,才应该存在初始化的局部变量(int ans=0;)?如果无条件地使用值初始化变量,这就是默认情况。只有当零是程序可以有意义地使用的ans
的有效值时,才应该这样做。是的,我看到//永远不会在有这么多bug的站点上出现注释。