2014-05-21 2 views
0

그래서 내 값 내에서 간단한 산술 연산을 수행하고 내 'pricingAction'클래스에서 'currentUser'객체를 사용하려고했습니다.산술에서 객체 값과 로컬 값

코드는 두 개의 볼륨 값 (double)을 추가하고 두 값의 합계에 변수 값을 설정해야합니다. 이 예에서 volume_2 및 volume_4 변수는 둘의 합계로 설정해야합니다.

방법 1 :

if(filled4 == true){ 
    if(currentUser.getUtility_2().equalsIgnoreCase(currentUser.getUtility_4())){ 
     currentUser.setVolume_2(currentUser.getVolume_2() + currentUser.getVolume_4()); 
     currentUser.setVolume_4(currentUser.getVolume_2() + currentUser.getVolume_4()); 
    } 
} 

방법 2 :

if(filled3 == true){ 
    if(currentUser.getUtility_2().equalsIgnoreCase(currentUser.getUtility_3())){ 
     holder = 0; 
     holder = currentUser.getVolume_2() + currentUser.getVolume_3(); 
     currentUser.setVolume_2(holder); 
     currentUser.setVolume_3(holder); 
    } 
} 

방법 2 개 반환 기대 가치와 방법 1가에 설정 한 값의 중복에 던지는 것으로 보인다.

제 질문은 왜 방법 1이합니까?

foo.setX(foo.getX() + foo.getY()); 
foo.setY(foo.getX() + foo.getY()); 

을 이제 우리를 생각 : 난 단지 그냥 현재의 값에 여분의 합에 압정으로 고정되어 있지만 세터 방법의 그것을 쉽게 읽을 그래서 코드를 약간 단순화합시다 일반적인 this.x = x;

+2

해야 하는가? 값은 무엇입니까? 이 코드는 문맥에서 벗어나지 않습니다. –

+1

method1에서 첫 번째 산술에서 setVolume_2에 값을 설정한다는 점을 더 명심하십시오. 다음 산술에서 getVolume_2의 값은 첫 번째 산술에서 업데이트 된 값이됩니다. getVolume_4가 0 일 수 있으므로 값이 중복 된 것처럼 보입니까? –

+0

당신이 깨닫지 못하는 것처럼 들리지만, 첫 번째 방법에서는 코드의 두 번째 줄에서 방금 증가시킨 볼륨 2의 값을 사용합니다. –

답변

2

가정 할 수 있습니다 foo.X = 10, foo.Y = 20으로 시작하십시오. 처음 foo.X + foo.Y 계산한다

제 문 - 10 + 20, 또는 30 인 그러므로 설정하는 (30)에 대한 foo.X새로운 값.

두 번째 문은 처음에 foo.X + foo.Y (30 + 20 또는 50)을 계산합니다.이 값은 foo.X의 새 값을 사용합니다. 그런 다음 의 새 값을으로 설정하고 foo.Y 값을 50으로 설정합니다.

두 속성에 동일한 값을 설정하려는 경우 계산에 영향을주지 않는 첫 번째 속성의 값이 변경되지 않도록 해당 값 을 한 번으로 계산해야합니다. 뿐만 아니라 맞습니다

double result = foo.getX() + foo.getY(); 
foo.setX(result); 
foo.setY(result); 

을하지만 보다 효율적으로 이해하는 것이 더 쉽다 : 그러나, 같은 로컬로 할 수있는만큼 그 값에 대한 로컬 변수를 선언 명확합니다. 보너스!

+0

오, 와우, 지난 1 시간 동안 직장에서 이것을 어지럽 혀 왔고 어떻게 든 그것을 놓쳤습니다. 나는 단지 그것을 복잡하게하려고 노력하고 있었다고 생각한다. – gcalex5

1

새 값을 사용하여 volume4를 설정하기 전에 volume2 값을 설정했기 때문에.

currentUser.setVolume_2(currentUser.getVolume_2() + currentUser.getVolume_4()); 
// volume2 now set with new value 
// which you are about to use below 
currentUser.setVolume_4(currentUser.getVolume_2() + currentUser.getVolume_4()); 
1

코드는 두 개의 추가를 수행하는 (그리고 난 당신을 원 의심) -

if(currentUser.getUtility_2().equalsIgnoreCase(currentUser.getUtility_4())){ 
    // Changes volume 2 
    currentUser.setVolume_2(currentUser.getVolume_2() + currentUser.getVolume_4()); 
    currentUser.setVolume_4(currentUser.getVolume_2() + currentUser.getVolume_4()); 
} 

아마 일이 기대하고 무엇

if(currentUser.getUtility_2().equalsIgnoreCase(currentUser.getUtility_4())){ 
    int newVolume = currentUser.getVolume_2() + currentUser.getVolume_4(); 
    currentUser.setVolume_2(newVolume); 
    currentUser.setVolume_4(newVolume); 
}