可能未初始化局部变量

时间:2012-12-22 19:25:45

标签: java scope

  

可能重复:
  Variable not Initialized - Although I am?

我对编程很新,所以我想尝试制作一个简单的计算器,这个计算器不是特定于像+这样的符号。无论如何,我不太清楚为什么这不起作用,因为据我所知,我已经做好了一切。

import java.util.Scanner;

public class calculator2 {

    public static void main(String args[]){

        Scanner tom = new Scanner(System.in);
        double fnum, snum, answer;
        int symbol;


        System.out.println("Enter First Number");
        fnum = tom.nextDouble();

        System.out.println("Enter Comand, 1 = add, 2 = subtract, 3 = divide, 4 = multiply");
        symbol = (int)tom.nextDouble();

        System.out.println("Enter Second Number");
        snum = tom.nextDouble();

        switch (symbol){

        case 1:         
            answer = fnum + snum;

        case 2:         
            answer = fnum - snum;

        case 3:         
            answer = fnum / snum;

        case 4:         
            answer = fnum * snum;       
        }

        System.out.println(answer);
    }
}

4 个答案:

答案 0 :(得分:1)

这是因为您没有初始化answer变量,并且您的switch语句缺少default个案例来分配它。 Java编译器认为如果symbol 1..4,那么answer在您将其传递给println时将保持未初始化状态。

您可以在声明时将answer设置为某个初始值,也可以将default个案添加到switch

答案 1 :(得分:1)

在声明变量(初始化它)时为其分配默认值,或者为交换机提供默认大小写:

选项1:

double answer = 0;

选项2:

switch(symbol) {
    case 1:
        ...
    default:
        answer = 0;
}

请注意,您的代码中存在严重错误:您的案例的每个代码块都应以break;结尾,即

switch(symbol) {
case 1:
    answer = fnum + sum;
    break;
etc
default:
    answer = 0;
}

否则也会执行以下情况的所有代码。开关盒就像一个转到。

答案 2 :(得分:0)

你需要给fnum,snum,在你声明符号时回答一个符号,或者java不能保证它有一个值可以用于进一步的计算。

答案 3 :(得分:0)

或者您为switch语句添加了一个default子句,或者您需要初始化 answer 变量。

此外,由于“切换失败”,您的代码可能有问题。当满足case语句中的条件时,以下case语句也将被执行,直到有break(或return)语句。

如果我遇到你的情况,我会编写类似的代码:

double fnum = 0, snum = 0, answer 0;
int symbol = 0

...

switch (symbol){

    case 1: 

        answer = fnum + snum; break;

    case 2:

        answer = fnum - snum; break;

    case 3:

        answer = fnum / snum; break;

    case 4:

        answer = fnum * snum; break;
    default:

    }