当前位置: 首页 > 知识库问答 >
问题:

编译器认为变量没有赋值,但如果语句覆盖所有值[关闭]

卢黎昕
2023-03-14

在这段代码中有一个编译时错误。

"Example.java:17:错误:变量y可能没有被初始化"。

谁能解释一下这个错误的原因以及如何修复它?

import java.util.*;
class Example{
  public static void main (String args[]){
    Scanner input=new Scanner(System.in);
    System.out.println("Input an integer : ");
    int num=input.nextInt();
    int y;
    if(num>100){
      y=200;
    }
    if(num<100){
      y=200;
    }
    if(num==100){
      y=200;
    }
    System.out.println(y);
    
  }
}

共有1个答案

慕容铭
2023-03-14

访问变量之前必须初始化。

静态变量和实例变量是隐式初始化的,即使您在声明它们时没有提供值。但是对于局部变量,情况并非如此,在使用它们之前,必须显式地分配它们。

您没有使用else语句,而且编译人员也不清楚您已经涵盖了所有可能的情况。

 类似资料:
  • 在这段代码中有一个编译时错误。 "Example.java:17:错误:变量y可能没有被初始化"。 谁能解释一下这个错误的原因以及如何修复它?

  • 使用Brian Goetz的文章:https://www.infoq.com/articles/data-oriented-programming-java/ 使用,我得到编译错误:。 我可以添加一个默认的case语句,程序就可以运行了。然而,我认为对于密封的记录,给定的switch case将是详尽无遗的,编译器应该认识到默认情况是不必要的。

  • 以下代码不能用javac 1.8.0_144和ECJ编译: > 未声明为最终。 在赋值表达式(§15.26)中,它从不作为左手边出现。(请注意,包含 初始值设定项的局部变量声明符不是赋值表达式。) 它从不作为前缀或后缀递增或递减运算符的操作数出现(§15.14,§15.15)。 它从不作为前缀或后缀递增或递减运算符的操作数出现。 方法、构造函数、λ或异常参数(§8.4.1,§8.8.1,§9.4,

  • 我正在准备JavaOCA认证,遇到了一个类似的问题,如下所示: 按照Java,实例和静态变量被赋予默认值。令人惊讶的是,我的控制台上显示的错误是: 为什么没有在上面分配默认值?

  • 赋值语句在 Lua 被强化了,它可以同时给多个变量赋值。 例如: a,b,c,d=1,2,3,4 甚至是: a,b=b,a --多么方便的交换变量功能啊 在默认情况下,变量总是认为是全局的。假如你要定义局部变量,则在第一次赋值的时候,需要用 local 说明。比如: local a,b,c = 1,2,3 -- a,b,c 都是局部变量