2014-01-15 95 views
-1

用户应该将值输入到x和y,如果x大于5,并且当y = 0时,则z应该等于x + y。但是,当我编译它给我一个错误,说z可能没有被初始化。错误原因:var可能没有初始化

import java.util.Scanner; 
public class add { 
    public static void main(String[] args){ 
     Scanner input = new Scanner (System.in); 
     System.out.print("Enter a value for x"); 
     int x = input.nextInt(); 

     System.out.print("\nEnter a value for y "); 
     int y = input.nextInt(); 

     int z; 

     if (x > 5){ 
      if (y == 0) 
       z = x + y; 
      System.out.println("The answer is " + z); 

     } 
     else 
      System.out.println("The answer is only" + x); 
    } 
} 
+1

简单地说:如果'y == 0'为false,那么'z'将保持未初始化状态。 –

+0

...或'x> 5'为假 –

+0

只有在'y == 0'时才初始化'z'。如果你想进一步使用它,你需要初始化,比如'int z = 0;' –

回答

0

由于你没有使用大括号如果条件,你的z不会被初始化。

要解决这样的问题,请务必记住,如果您正在计算某些具有整型变量的值,请使用某个值初始化它们(这里,0是最好的值)。

然后,您可以在代码中的任何位置访问该变量,而不会出现任何初始化错误。

为了摆脱这个问题,你有两种方式

方式一:

只是简单地初始化变量z,如:

int z=0; 

方式二:

试图把大括号如果条件如:

if (y == 0){ 
    z = x + y; 
    System.out.println("The answer is " + z); 
} 
+0

第一种方式要好得多,谢谢 – user3196297

4

有一种情况z不会被初始化的执行路径,而是试图将其打印出来。如果x大于5,但y不是0,则z未初始化,但打印时请参考z

使用大括号来创建你内心if语句中的内部块,所以z如果它初始化只引用:

if (x > 5){ 
    if (y == 0) { 
     z = x + y; 
     System.out.println("The answer is " + z); 
    } 
} 

此外,适当的缩进有助于识别视觉什么是块的一部分,什么不是。

1

你的 '如果' 语句是一种误导:

if (y == 0) 
    z = x + y; 

如果Y = 0!?在这种情况下,z不会被初始化。

下一行

System.out.println("The answer is " + z); 

并不适用于y == 0的声明,因为你没有括号{}。

你大概意思写的东西,如:

if (x > 5) { 
    if (y == 0) { 
    z = x + y; 
    System.out.println("The answer is " + z); 
    } 
} 

注意 “{” if语句之后。

0

无论是什么,您都需要向编译器保证z将得到一个值

声明时可能需要为其分配默认值。

东西沿着这些路线:

int z = 0; // just an example 
0

INT z的任何值,尝试代码在底部然后给它一个为0或input.nextInt(); int z = 0; 或 int z = input.nextInt();