2014-11-15 1 views
0

동일한 변수 인 pikaHP을 사용하는 두 가지 방법이 있습니다. 첫 번째 방법은 pikaHP의 값을 빼고 출력하는 데 잘 작동하지만 그 다음 메서드로 바로 갈 때 값은 원래 값으로 재설정되었습니다. 여기 다른 방법에 대해 수정 된 변수 값을 저장하는 방법은 무엇입니까?

코드의 일부 모습입니다 같은 :

int pikaHP = 30; 

    static void fight(int pikaHP, /*(insert other variables here)*/) 
    { 
     pikaHP = pikaHP - 5; //outputs 25 fine on the next line 
     System.out.println("Pikachu's hp is " + pikaHP); 
    } 

    static void currentHP(int pikaHP /*(inster other variables here)*/) 
    { 
     //This time pikaHP is printed as 30 
     System.out.println("pikachu's hp is " + pikaHP); 
    } 

내가 pikaHPmain 방법 30로 설정하고 두 방법은 단지 30

의 양을 잡아 때문에 이런 일이 같은데요

fight() 메서드에서 pikaHP을 25 (또는 원하는 값)로 저장 한 다음 currentHP() 메서드로 25를 전달하면 30 대신 "pikachu 's hp is 25"가 출력됩니까?

+0

클래스 수준에서 동일한 값을 원하면 pikaHP (변수)를 정적으로 만들 수 있습니다. – bharatpatel

답변

1

메소드는 전달 된 변수 값 (예 : pikaHP) 만 Java가 값어치 언어이기 때문에 변경할 수 있습니다. 변경 사항을 메소드 호출에서 존속 시키려면 변수를 정적 메소드로 전달하는 대신 정적으로 설정하십시오.

대체 방법 (이 변수가 main 메서드에서 로컬로 선언 된 경우이 방법으로 유지하려는 경우)은이 변수를 인수로 가져 와서 해당 값을 변경하려는 각 메서드는 해당 값의 수정 된 값을 반환합니다. 변수를 사용하고 main 메소드는 새로운 값을 변수에 할당합니다.

0

정적 메서드는 인스턴스 변수 pikaHP를 보지 못합니다 (정적 메서드는 인스턴스에 연결되지 않음을 의미합니다), 전달 된 인수는 값으로 전달 된 프리미티브, 전달 된 값의 수정 메소드 호출은 메소드 호출의 값 사본에만 영향을 미치며 나머지 프로그램에는 영향을 미치지 않습니다.

나는 변수를 정적으로 만들기위한 조언에 동의하지 않습니다. 즉각적인 문제를 해결할 수는 있지만 그것이 의미가있는 프로그램으로 이어지지는 않을 것입니다. 프로그램이 하나 이상의 pikaHP 변수를 가질 수 없게됩니다 (그래서 당신은 하나 이상의 생물의 hp를 추적 할 수 없습니다). 이 클래스). 메소드를 인스턴스 메소드 (정적 수정자를 제거)로 만드는 것이 좋습니다. 어쨌든 인스턴스의 속성을 참조하고 있습니다 (pikaHP는 한 생물의 속성처럼 보입니다). 정적 수정자를 사용하지 않으면 메서드가 인스턴스 변수를 직접 수정할 수 있습니다. (인스턴스 메소드가되면 인스턴스 변수를 섀도우하게하는 매개 변수도 제거하십시오.)

정적 변수와 관련된 해킹에 의지하지 말고 다음과 같이 자신의 상태를 관리하는 잘 정의 된 객체를 만들어보십시오.

public class Creature { 
    private int hp; 
    private int attackDamage; 

    public Creature(int startingHp, int damage) { 
     hp = startingHp; 
     attackDamage = damage; 
    } 

    public void takeDamageFrom(Creature opponent) { 
     hp -= opponent.attackDamage; 
    } 

    public void attack(Creature opponent) { 
     opponent.takeDamageFrom(this); 
    } 
} 

이렇게하면 개체가 자신의 HP 합계를 추적하는 개별 개체를 나타냅니다.

관련 문제