初始化变量Java

时间:2016-02-04 13:37:36

标签: java initialization

我正在用一个while循环和开关编写一个简单的程序,它接受一个数学运算并为给定的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 == '-');

}

}

5 个答案:

答案 0 :(得分:3)

这是因为如果没有案例评估为true,则不会设置ans的值。所以你不能使用它。

您可以通过添加default案例并将ans的值设置为0来解决此问题。

答案 1 :(得分:3)

Java要求在使用之前初始化所有局部变量。

在您的打印行中,您读取了abs的值,但并非所有控制路径都为其设置了值。 (即使你认为你已经涵盖了switch给出外部if的所有可能性,编译器也不会看到这样的东西:其他一些线程可以修改operator)。

因此,您的IDE /编译器建议您在声明时初始化它。

答案 2 :(得分:2)

您应初始化ans=0;,因为default没有ans值,因此您需要对其进行初始化。
但是如果添加defualt值,则不需要像这样初始化它:

    ...
    case '-':
    ans = no1 - no2;
      break;
    default :
    ans = someValue; 
     break; 

答案 3 :(得分:2)

嗯,可能是没有任何case语句适用,结果ans仍然是未初始化的。由于局部变量在使用之前必须进行初始化,因此会出现此错误。

答案 4 :(得分:2)

如果你没有初始化它,你的ans首先会有一个垃圾值。

初始化它不是强制性的。

但如果你初始化它,你的程序将是一个更好的程序。