访问在switch-statement中初始化的变量,然后在switch外部使用它们时遇到问题。使用变量,在switch-statement中初始化,在外部
这是我的代码应该产生: 的是:X(+ - * /或)X
这里是我的Java代码:
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);
}
}
正如你所看到的, “答” 有已被宣布并初始化。但是,我想在if语句(为了比较结果)和输出中使用ans变量。
现在我可以扩展每个case并编写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)
非常感谢,谢谢!所以像(int ans = 0;)这样的初始化局部变量应该只存在于默认情况下不可行的情况下? – Racket
如果你无条件地用一个值初始化一个变量,*这是默认情况。*你应该这样做,如果零是ans的有效值,你的程序可以以有意义的方式使用。 – erickson