訪問在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