1

可能重复:
变量未初始化 - 虽然我是?

我对编程很陌生,所以我想尝试制作一个简单的计算器,它并不特定于像 + 这样的符号。无论如何,我不太确定为什么这不起作用,因为据我所知,我做的一切都是正确的。

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

4 回答 4

1

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

您可以answer在声明时设置一些初始值,或者defaultswitch.

于 2012-12-22T19:29:15.940 回答
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;
}

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

于 2012-12-22T19:30:43.000 回答
0

当你声明它们时,你需要给 fnum、snum、answer 一个符号一个值,否则 java 不能保证它有一个值可以在进一步的计算中使用。

于 2012-12-22T19:30:00.660 回答
0

或者你为你的 switch 语句添加一个默认子句,或者你需要初始化你的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:

    }
于 2012-12-22T19:40:03.483 回答