2012-10-24 4 views
0

나는 왜 처음에는 CameraShone 클래스 컴파일러에서 즉시 선언 된 변수 imageSize 및 memorySize를 사용하여이 코드를 컴파일하려고 시도 하였을 때 귀찮은 질문을 받았다. 논리 오류가 발생했지만 결국 변수를 선언하면 완벽하게 작동합니다. 코드???변수 범위 지정

Phone 클래스가 있다고 가정합니다. 두 개의 인스턴스 변수를 포함하는 CameraPhone을 정의하십시오. 각 이미지의 메가 픽셀 단위의 크기를 나타내는 정수 (imageSize, 간단히하기 위해 픽셀이 1 바이트를 차지하므로 메가 픽셀은 메가 바이트와 같습니다) (즉, 2는 각 이미지가 2 메가 픽셀로 구성) 및 memorySize라는 정수로 카메라의 메모리에 기가 바이트 수를 나타냅니다 (예 : 4는 4GB의 메모리를 의미 함). 위의 두 인스턴스 변수에 해당하는 두 개의 정수 매개 변수를 받아들이고 각 인스턴스 변수를 초기화하는 데 사용되는 생성자가 있습니다. numPictures라는 메서드는 카메라의 메모리가 보유 할 수있는 그림의 수를 (정수로) 반환합니다. 기가 바이트는 1,000 메가 바이트라는 것을 잊지 마십시오.

+0

원본 코드와 오류를 게시 할 수 있습니까? – Romski

+0

그냥 int int imageSize 잘라내어 붙여 넣기; 개인 int 메모리 크기; public class 바로 아래 CameraPhone extends Phone { – gucciv12

+2

이 질문은 많은 불필요한 세부 사항을 포함하고 있습니다. 불필요한 세부 사항을 제거하기 위해 노력하십시오. 예를 들어, "기가 바이트가 1000 메가 바이트라는 것을 잊지 마십시오."라는 말은 변수 범위에 관한 질문과 관련 될 수 없습니다. –

답변

1

그리고 "논리 오류"는 무엇입니까? 문제없이 코드를 복사하여 붙여 넣으면 아무 문제가되지 않습니다. 어디에서나 속성 (일명 "인스턴스 변수")을 선언했습니다. 처음부터 끝까지 모두 동일합니다. 실제로는 으로 선언되고 으로 초기화됩니다. 내가 의미하는만큼이 라인이 어디 클래스 선언 내부에 나타나는 (안 메서드 내 마음 당신이) 코드를 컴파일하는 것입니다 : 또한

private int imageSize; 
private int memorySize; 

, 그 생성자 내부 this를 사용하는 완벽하게 합법적이다 오류를 일으키는 이 아닌입니다. 그리고 속성은 선언 한 곳이나 생성자 내부에서 직접 초기화 할 수 있습니다.

+0

이들은 웹 컴파일러의 일종을 사용하는 "MyProgrammingLab"온라인 연습의 일부이지만 변수를 클래스 아래로 옮기고 myProgrammingLab 컴파일러에서 다시 실행하여 이제 오류를주지 않습니다. 이상한 – gucciv12

+0

나는 그 오류가 다른 것이었을 것이라고 생각한다. 당신이 속성을 선언 한 실제 _place_는 부적절하다. 이 또는 다른 답변이 도움이 되었다면 왼쪽에있는 체크 표시를 클릭하여 동의하는 것을 잊지 마십시오. –