2014-01-13 2 views
1

안녕하세요 다시 StackOverflow의에 메소드를 호출 할는, 사용자의 입력을 읽고 두 번째 클래스

짧은 버전 : 나는 secondCommand라는 문자열을 가지고 있고, 그 문자열이 내가 다른 클래스에서 호출 할 방법의 경우, 이 문자열을 실제로 사용하기 위해 "Circle.secondCommand" 형식으로 문자열을 사용할 수 있습니까?

긴 버전 : 모양 조작에 대한 프로그램을 작성 중입니다. 현재 서클 만 사용하고 있지만 원이 제대로 작동하면 3 가지 모양으로 확장됩니다. 현재 내 프로그램은 다음과 같이 작동합니다.

InputReader는 사용자 입력을 검색하여 각 단어 입력을 개별적으로 반환합니다. 이것은 ShapeProgrammer 클래스에서 'Execute'라는 메서드로 처리됩니다. 약자로 그 방법은 다음과 같습니다

private void execute(String[] commands) 
{ 
    String firstCommand = commands[0]; 
    String secondCommand = commands[1]; 
    String thirdCommand = commands[2]; 
    { 
     Circle c = shapes.get(firstCommand); 
     if(firstCommand.equals("circle")) { 
     makeACircle(commands); 
     } 
     else if(c != null){ 
      int newInt = Integer.parseInt(thirdCommand); 
      if (newInt != null) 
       Circle.secondCommand(newInt);    
      c = null; 
     } 
     else if(firstCommand.equals("help")) { 
     printHelp(); 
     } 
     else { 
     System.out.println("Unknown command: " + firstCommand); 
     } 
    } 
} 

문자열 [] 명령이과 같이 이전 방법에 잠시 문에 정의되어

String[] commands = reader.getInput(); 

나는 별도의 모양 자체에 대한 모든 방법을 각 셰이프의 클래스 - Execute 메서드에 내가 수행하려는 작업을 기록했지만 NetBeans가 모든 종류의 오류를 제공합니다.

사용자는 특정 형식으로 입력 자신의 명령을했다 (그리고) 기대됩니다

모양을 만들 때이 될 것입니다 모양 이름 각 모양은에서의 HashMap에 저장됩니다

문자열이 이름 인 순간

모양을 편집/사용하려면 이름 명령 변수이 될 것입니다. - 지금까지는 HashMap에서 모양을 호출 한 것 같습니다. 내가 어떻게 내 문자열을 만들 수 있는지 궁금해. ndCommand는 다른 클래스의 메소드를 호출 할 때 사용할 수 있습니다.

사이드 메소드로 int newInt = Integer.parseInt (thirdCommand) 이 있습니다. 내 메소드 중 일부는 changeSize이거나 그렇지 않으면 int 입력이 필요합니다. 그걸 없애고 Circle 클래스에 넣으면 더 쉬울거야. 그러면 thirdCommand 문자열을 다른 메서드로 호출하고 int로 변환하면된다.

+1

너무 오랫동안 정확하고 특별한 질문을합니다. –

+0

편집 해 주셔서 감사합니다. – user3074653

답변

0

나는 reflections API가 도움이 될 것이라고 생각합니다. 메소드를 이름으로 호출하는 쉬운 방법입니다. 이 tutorial은 도움을드립니다. 기본적으로 :

 String methodName = ***; 
    Class classToBeInvoked = **.class; 

    Method javaMethod = classToBeInvoked.getMethod(methodName, <arguments-type>); 
    Object returnType = javaMethod.invoke(classToBeInvoked, <arguments>); 
0

그것을 해결하는 또 다른 (너무 우아하지 반사 등) 방법,

왜 당신은 문자열에서 이러한 모든 방법을 정의 arrayand 스위치의 경우 블록에서 사용하지 마십시오?

////////// In your end method //////// 
switch (secondCommand) { 
    case "DIAGON": 
     Circle.diagon(); 
     break; 

    case "THING": 
     Circle.thing(); 
     break; 

    case "ANOTHERFORMULA": 
     Circle.anotherFormula(); 
     break; 

    default: 
     System.out.println("Daamn good."); 
     break; 
} 

영웅이되고 싶지 않다면이 방법 이름을 사용하면 좋습니다.

관련 문제