2012-10-24 187 views
0

我得到了一个恼人的问题,为什么当我第一次试图编译这个代码时,在CameraPhone类编译器下立即声明的变量imageSize和memorySize给了我一个逻辑错误,但是当我在变量的末尾声明变量时,代码???变量范围

假设存在Phone类。定义一个子类CameraPhone,它包含两个实例变量:一个名为imageSize的整数,表示每张图片的大小(单位为百万像素,为简单起见,假设像素占用一个字节 - 因此百万像素等于兆字节)由2百万像素组成)以及一个名为memorySize的整数,表示相机内存中的千兆字节数(即4表示4 Gigabyes的内存)。有一个构造函数接受与上述两个实例变量相对应的两个整数参数,这些参数用于初始化相应的实例变量。还有一种名为numPictures的方法,它返回(整数)相机内存可容纳的图片数量。不要忘记,一个千兆字节是1,000兆字节。

public class CameraPhone extends Phone { 

    public CameraPhone(int imageSize, int memorySize) { 
     this.imageSize = imageSize; 
     this.memorySize = memorySize; 
    } 

    public int numPictures() { 
     return memorySize * 1000/imageSize; 
    } 

    private int imageSize; private int memorySize; 

} 
+0

您可以发布原始代码和错误。 – Romski

+0

只需剪切并粘贴私人int imageSize; private int memorySize;立即在公共课堂下CameraPhone延伸电话{ – gucciv12

+2

该问题包含许多无关细节。请努力消除不必要的细节。例如“不要忘记,一个千兆字节是1000兆字节”不可能与有关变量范围的问题有关。 –

回答

1

什么是你得到的“逻辑错误”?如果你复制并粘贴问题中的代码,它将毫无问题地工作,在所有的这里你都声明了属性(又名“实例变量”) - 在开头,最后它们都是一样的只要你真的宣布初始化他们的地方。我的意思是,只要这些行出现在类声明内的任意位置(而不是方法中,提醒你)的代码可以编译:

private int imageSize; 
private int memorySize; 

此外,这是完全合法的使用this在构造函数中,那是而不是导致错误。这些属性可以直接在声明它们的地方初始化,或者在构造函数中初始化。

+0

这些是“MyProgrammingLab”在线练习的一部分,它使用某种网页编译器,但我将这些变量移回到类下,并在myProgrammingLab编译器中重新运行,现在它不会给我任何错误。很奇怪 – gucciv12

+0

我敢打赌,错误是别的,你声明属性的实际_place_是无关紧要的。如果这个或其他答案对你有帮助,请不要忘记通过点击左边的复选标记来接受它。 –