의 방법으로 배열의 값을 변경 내 코드입니다 ? MyClass()
형 대신에 당신은 당신의 생성자에서 지역 변수 array
선언이자바 클래스 다음
int[] array = new int[10];
의 방법으로 배열의 값을 변경 내 코드입니다 ? MyClass()
형 대신에 당신은 당신의 생성자에서 지역 변수 array
선언이자바 클래스 다음
int[] array = new int[10];
이
this.array = new int [10];
에서
, 실제로 Myclass
에 선언 된 array
를 초기화하지 않을 수 있도록.
생성자에서 array
을 직접 참조 할 수 있습니다. 대신
int[] array = new int[10];
사용이
array = new int[10];
은 또한, 당신은 당신의 Myclass
클래스의 범위 array
static으로 선언했습니다.
private static int[] array;
당신은 여기 Myclass
의 인스턴스를, 그래서 그것은 중요하지 않습니다,하지만 당신은 생성자에서 초기화하는 경우 일반적으로이 정적 없을 것이다. static
을 삭제해야합니다.
private int[] array;
코드는 다음과 같아야합니다. 생성자에서 인스턴스 변수를 초기화하는 대신 새 로컬 변수를 만들었고 인스턴스 변수는 초기화되지 않고 NullPointerException을 발생 시켰습니다. 또한 인스턴스 변수는 정적이어서는 안됩니다. 당신이 m
(즉 m.array
)의 필드로 array
을 사용하려는 경우
class Myclass {
private int[] array;
public static void main(String[] args) {
Myclass m = new Myclass();
for (int i = 0; i < 10; i++) {
m.array[i] = i;
System.out.println(m.array[i]);
}
}
public Myclass() {
array = new int[10];
}
}
첫째, static
로 선언하지만,하지 않습니다 당신이해야 할
private int[] array;
다음 일이 초기화하는 것입니다 그것. 그 중 가장 적합한 곳은 생성자입니다.
public MyClass() {
array= new int[10]; //just array = new int[10]; don't put int[] in front of the array, because the variable already exists as a field.
}
나머지 코드는 작동합니다.
생성자에서 배열이라는 정적 클래스 변수가 아닌 로컬 변수 이름 배열에 할당을 지정합니다. 이것은 범위 문제입니다.
또한 m.array를 통해 배열에 액세스 할 때 정적 변수가 아닌 멤버 변수가 필요하다고 생각합니다. 수정 사항은 다음과 같습니다
class Myclass {
private int[] array;
public static void main(String[] args) {
Myclass m = new Myclass();
for (int i = 0; i < 10; i++) {
m.array[i] = i;
System.out.println(m.array[i]);
}
}
public Myclass() {
rray = new int[10];
}
}
답을 높이기 위해 다운 보더를 사용 하시겠습니까? –
+1, 나는 당신의 대답을 downvote하지 않았지만 당신의 대답은 정확합니다. – rgettman
@rgettman 모든 응답이 0이 될 때 나는 당신을 비난하지 않았습니다. 나는 또한 당신의 질문을지지했습니다. –