[英]Initializing a variable Java
我正在編寫一個帶有do while循環和switch的簡單程序,該cna接受數學運算並針對給定的2個數字執行它。
我的問題是,為什么我應該在開始時將操作產生的結果初始化為零。
如果我不使ans = 0,它將給我錯誤。 如果不滿足給定的條件,則某些代碼部分將不會執行,並且我不需要“ ans”。
package q3;
import java.util.Scanner;
public class Q3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
char operator;
float no1, no2, ans=0; // <-------------- Why should I initialize ans
do {
System.out.println(" Mathematical Operations to be performed :");
System.out.println("\t * Multiplication\n\t / Division\n\t + Addition\n\t - Subtraction");
System.out.println("Press any other character to exit");
System.out.print("Mathematical Operator : ");
operator = input.next().charAt(0);
if (operator == '*' || operator == '/' || operator == '+' || operator == '-') {
System.out.print("Number 1: ");
no1 = input.nextFloat();
System.out.print("Number 2: ");
no2 = input.nextFloat();
switch (operator) {
case '*':
ans = no1 * no2;
break;
case '/':
ans = no1 / no2;
break;
case '+':
ans = no1 + no2;
break;
case '-':
ans = no1 - no2;
break;
}
System.out.println("The answer of " + no1 + operator + no2 + " = " + ans);
}
} while (operator == '*' || operator == '/' || operator == '+' || operator == '-');
}
}
這是因為如果不區分大小寫,則不會設置ans
的值。 所以你不能使用它。
您可以通過添加default
大小寫並將其中的ans
值設置為0來克服此問題。
Java要求所有局部變量在使用之前都要初始化。
在打印行中,讀取abs
的值,但並非所有控制路徑都為其設置一個值。 (即使您認為您已經涵蓋了使用外部if
switch
所有可能性,編譯器也不會那樣看:其他線程可以修改operator
)。
因此,您的IDE /編譯器建議您在聲明時進行初始化。
您應該初始化ans=0;
因為您沒有ans
的default
值,所以您需要對其進行初始化。
但是,如果添加默認值,則無需像這樣初始化它:
...
case '-':
ans = no1 - no2;
break;
default :
ans = someValue;
break;
好吧,可能沒有任何case語句適用,結果ans
仍未初始化。 而且由於局部變量必須在使用之前進行初始化,因此會出現此錯誤。
如果您沒有初始化它,那么ans首先將具有一個垃圾值。
初始化它不是強制性的。
但是,如果將其初始化,則程序將是一個更好的程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.