2013-07-02 3 views
0

작은 프로젝트에서 나는 막혔다. 사용자가 "xp Speed"명령을 입력하면 명령 처리기 클래스가 속도 인스턴스의 XP 값을 원한다는 것을 알게됩니다. 이 경우 Skill.Speed.currentXP의 값을 다시 사용자에게 반환해야합니다. 프로그램의사용자가 인스턴스 이름을 문자열로 입력 할 때 인스턴스 메서드 호출

작은 부분 : 이제

//Example Instance initialization there is over 40 of these 
Skill Speed = (new SkillSpeed(Skills.SKILL_SPEED,Skills.SKILL_SPEED_MODIFIER)); 

//Constructor for skill class 
public Skill(String skillName, double modifier) { 
    this.name = skillName; 
    this.minLevel = Skills.MIN_SKILL_LEVEL; 
    this.Modifier = 1f; 
    this.currentLevel = (int)calculateLevel(); 
    this.currentXP = 1; 
    this.leaderboard = getCurrentLeaderboard(); 
    this.ID = getNextID(); 
} 

, 내가이 작업을 수행 할 수있는 한 가지 방법을 프로그래머. 대/소문자 값이 입력 된 문자열 인 switch 문을 사용합니다. 그러나 하나의 switch 문에 40 개 이상의 사례가 있으면 피할 수 있어야합니다. 내가 가진 다른 이론은 모든 현재 인스턴스의 배열을 생성 한 다음 그 목록을 반복하면서 사용자가 입력 한 문자열이 해당 인스턴스의 이름과 동일한 지 확인한 다음 인스턴스 자체를 반환하는 것입니다.

  • 스킬을 반환하는 메소드를 작성하는 모든 초기화 인스턴스

  • 의 배열을 만들기 : 그래서 여기에 내가 도움이 필요 무엇

    //method inside another classs that attempts to return the appropriate skill Instance 
    public Skill getSkillFromName(String Name) { 
        for(int i = 0; i < Skill.SkillArray.length; i++) { 
         final String SkillName = Skill.SkillArray[i].getName(); 
         if(SkillName.equalsIgnoreCase(Name)) { 
          return Skill.SkillArray[i]; 
         } 
        } 
        return null; 
    } 
    

    : 이것은 내가 생각 해낸 것입니다. "InsertRandomInstanceDependingOnUserInputHere".currentXP

  • getSkillFromName() 메서드에 표시되는 문제 수정

아마도이 작업을 훨씬 쉽게 수행 할 수있는 방법을 간과 했으므로 도움이 될 것입니다. 도움을

감사합니다,

BigDaveNz

+1

내 제안 : 스택 교환에서 [코드 검토] (http://codereview.stackexchange.com/)를 사용하여 코드를 검토하십시오. 숙련 된 Java 프로그래머에게는 코드에서 모범 사례를 사용하지 않아도 읽기가 어렵습니다. 또한 코드 검토에 더 많은 코드 (전체 클래스)를 게시 할 수 있습니다. –

답변

0

이름 만약

Map<String, Skill> skills = new HashMap<String, Skill>(); 

당신이 Map에 값을 넣어 값을 삽입하려면 기술의 excatly 방법 이름과 일치하는 당신은 "How do I invoke a Java method when given the method name as a string?"에서 aswer 찾을 수 있습니다.

이름으로 인스턴스를 찾으려면 Map의 이름을 여전히 사용할 수 있습니다.

0

당신은 이것에 대한 Map를 사용할 수 있습니다. 예 :

skills.put(skill.getName(), skill); 

당신의 기술을 검색하려면 이름으로 기술을 얻을 수 있습니다 :

Skill skill = skills.get(name); 
+0

그래서 모든 값을 수동으로 삽입합니까? skills.put (skill1.getName(), skill1); skills.put (skill2.getName(), skill2); 인스턴스 자체를 만들 때 자동화 된 방법이 있습니까? 빠른 답장을 보내 주셔서 감사합니다. –

+0

배열과 동일한 작업을 수행하고 있습니다. 그래서 그게 .. –

+0

@BigDaveNz 팩토리를 사용하여 인스턴스를 생성하고이를 사용하여 모든 기술을'Map'에 삽입 할 수 있습니다. –

관련 문제