2017-03-17 5 views
0
public class TriVal { 

private static int x; 
private static int y; 
private static int z; 

TriVal(int x, int y, int z) { 
    TriVal.x = x; 
    TriVal.y = y; 
    TriVal.z = z; 

    } 
public int sum(TriVal p2) { 
    int a = Math.abs(TriVal.x + p2.x); 
    int b = Math.abs(TriVal.y + p2.y); 
    int c = Math.abs(TriVal.z + p3.z); 
    int sum = a + b + c; 
    return sum; 
    } 
} 

이 값은 3 개의 값 집합을 포함하는 개체의 생성자 조각입니다. 그러나이 객체의 두 인스턴스에 대해 x, y 및 z를 합한 새 TriVal을 만드는 함수를 작성했습니다.개체의 새 인스턴스가 동일한 값으로 설정 됨

그래서 우리가

TriVal p1 = new TriVal(10, 10, 10); 
    TriVal p2 = new TriVal(20, 20, 20); 

그러나 90 를 반환해야합니다 (클래스의 다른 포함) 기능

p1.sum(p2) 

를 호출이 있다고, 내가 것을 배우고 (120) 을 반환 TriVal Object의 새 인스턴스를 만들 때 이전에 정의 된 p1 인스턴스가 어떻게 든 p2와 동일한 값으로 설정됩니다.이 값은 120이라는 합계를 설명합니다. 이 오류는 어딘가에 있습니다. n 내 생성자, 아마도 값을 업데이트하거나 클래스 상단에서 변수를 선언하는 방식으로? 유용한 팁이 있으면 감사하겠습니다. 감사합니다.

+1

'static'키워드의 의미를 알고 있습니까? 네가 그렇게하지 않으면, 나는 그것을 찾는 것이 좋습니다. 인스턴스 변수가 아닌 정적 값 x를 변경하려고합니다. x – Orin

+0

'x','y' 및'z'가'정적 '으로 선언 된 이유는 무엇입니까? 그게 네 문제 야. – JonK

+0

[정적 키워드는 클래스에서 무엇을합니까?] 가능한 복제본 (영문) (http://stackoverflow.com/questions/413898/what-does-the-static-keyword-do-in-a-class) –

답변

0
private static int x; 
private static int y; 
private static int z; 

인스턴스 구성원을 모든 인스턴스에 대해 동일하게 정적으로 선언했습니다. 마지막으로 할당 된 값을 저장합니다. 정적을 제거하면 괜찮을거야.

@Orin이 지적했듯이 매개 변수를 인스턴스 멤버에 바인딩해야하는 경우 코드를 약간 변경해야합니다.

+0

현재의 코드를 사용하면'TriVal.x'의 모든 인스턴스를'this.x' 등으로 대체해야합니다. – Orin

+0

맞아요, 이전에 이것을 알아 차리고 정적을 제거하려고했으나 오류가 발생했습니다. 첫 번째 생성자 내에서 비 ​​정적 필드에 대한 정적 참조를 만들면 정적 인 변수를 유지해야한다고 생각하게되었습니다. – rubyquartz

+0

@Orin이 문제를 해결했습니다. 고마워요! – rubyquartz