2016-08-19 38 views
1

我正在尝试2在java中创建项目,但这是我的问题的缩影。 我初始化一个while循环内的变量,现在只要while循环结束变量未设置或者简单地a = 7就不会被打印。除了使用while循环外,我没有别的选择。我有2获得已初始化的值。变量的作用域在while循环中结束

package Hotel_room_reservation_system; 
import java.awt.*; 
import java.lang.*; 
import java.io.*; 
public class NewClass { 

    public NewClass() 
    { 
     int a; 
     int z=0; 
     while(z<10) 
     { 
      a=7; 
      z++; 
     } 
     System.out.println(a); 
    } 
} 

然后我创建了这个类的新对象。

电流输出

变量可能尚未初始化

所需的输出

帮助。

+3

您将得到错误*“变量a可能未被初始化”*,因为编译器没有意识到您将**总是**输入while循环。它认为它不会的可能性,即使它总是会在你的例子中。你需要在循环之外初始化它。不知道为什么它是一个错误,而不是警告。 – Gendarme

+0

@JonnyHenly问题不在于他在使用它之前没有初始化它。这是他正在循环内部和其他地方初始化。该重复无法解决此问题。 – Gendarme

+0

@Gendarme yea你是对的 –

回答

4

只是初始化你的变量a

public NewClass() { 
    int a = 0; 
    int z = 0; 
    while (z < 10) { 
     a = 7; 
     z++; 
    } 
    System.out.println(a); 
} 

public static void main(String[] args) { 
    new NewClass(); 
} 

在Java中,类和实例变量采用默认值(null0false)如果未手动初始化。

但是,局部变量没有默认值。除非局部变量被赋值,否则编译器将拒绝编译读取它的代码。

+5

正如Gendarme在评论中所做的那样,为什么会使这个答案更有用/有帮助。 – clcto

+0

thnx会接受这个答案是3分 – ErrorrrDetector

+0

不客气:) – DimaSan

3

java编译器抱怨变量a可能尚未初始化。

这是因为编译器实际上不检查循环条件以确定循环的执行是否会发生。换句话说,它不知道循环是否会设置变量。

总的来说,通常是用合理的默认值初始化变量(例如int a=0;)。

+0

这是正确的答案,应该被接受。另外两个不能解释问题是如何与循环相关的:*编译器不检查循环条件以知道变量是否已被初始化*。 – Gendarme