Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 局部变量可能未初始化_Java_Scope - Fatal编程技术网

Java 局部变量可能未初始化

Java 局部变量可能未初始化,java,scope,Java,Scope,可能重复: 我对编程相当陌生,所以我想尝试制作一个简单的计算器,它不是特定于一个符号,比如+。不管怎样,我不太清楚为什么这不起作用,因为据我所知,我做的每件事都是对的 import java.util.Scanner; public class calculator2 { public static void main(String args[]){ Scanner tom = new Scanner(System.in); double fnum

可能重复:

我对编程相当陌生,所以我想尝试制作一个简单的计算器,它不是特定于一个符号,比如+。不管怎样,我不太清楚为什么这不起作用,因为据我所知,我做的每件事都是对的

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);
    }
}

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


您可以在声明点将
answer
设置为某个初始值,或者在
开关中添加一个
default
大小写,当您声明一个符号或值时,请回答该符号或值,否则java无法保证该符号有一个值可用于进一步计算。

在声明变量时为其指定一个默认值(初始化它),或为开关提供一个默认大小写:

备选案文1:

double answer = 0;
备选案文2:

switch(symbol) {
    case 1:
        ...
    default:
        answer = 0;
}
请注意,您的代码中有一个严重的bug:您案例中的每个代码块都应该以
中断结束,即

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

否则,也将执行以下情况的所有代码。switch case类似于goto。

或者为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:

    }

提示:用你正在使用的语言标记问题<代码>变量
本地
可以与任何语言相关,并且非常通用,因此不会有太多追随者。另外,不要在Stackoverflow的代码中使用制表符。这是错误的,默认情况是可选的。@chrismcabe我添加了一些说明。谢谢