2014-12-14 2 views
0

제 작업은 "번호 삽입"과 같이 터미널을 통해 명령을 받고 번호를 사용하여 삽입 방법을 호출하는 것입니다.터미널에서 입력을 받아 올바르게 사용하려면 어떻게해야합니까?

내 방법이 효과적입니다. 이 내 코드입니다 : 내 전체 코드의

String command = Terminal.readLine(); 
    while (command != null) { 

     switch (command) { 
     case "insert number": 
      String[] split = command.split(" "); 
      linkedTuple.insert(Integer.parseInt(split[1])); 
      break; 

일부만. 제 문제는 "insert number"를 사용하면 터미널에 삽입 번호를 쓰고 대신 3을 삽입하기 위해 예를 들어 3을 쓰고 싶지만 어떻게해야합니까? 케이스? 내 응용 프로그램을 종료하는 quit과 같은 명령이 작동 중이기 때문에 터미널이 작동합니다.

감사합니다.

편집 : 명확하게 내 주요 메도의 경우 :

public static void main(String[] args) { 

    int[] tuple = { 1 }; 
    LinkedNaturalNumberTuple linkedTuple = new LinkedNaturalNumberTuple(
      tuple); 


    String command = Terminal.readLine(); 
    String[] split = command.split(" "); 
    while (command != null) { 

     switch (split[0]) { 
     case "insert": 

      linkedTuple.insert(Integer.parseInt(split[1])); 
      break; 
     case "remove": 

      Terminal.printLine("" 
        + linkedTuple.remove(Integer.parseInt(split[1]))); 
      break; 
     case "swap": 

      if (!linkedTuple.swap(Integer.parseInt(split[1]), 
        Integer.parseInt(split[2]))) { 
       Terminal.printLine("Error, your numbers are invalid please try again!"); 
      } 
      break; 
     case "min": 
      if (linkedTuple.min() == -1) { 
       Terminal.printLine("Error, your tuple is empty, use insert number to insert a number!"); 
      } else { 
       Terminal.printLine("" + linkedTuple.min()); 
      } 
      break; 
     case "max": 
      if (linkedTuple.max() == -1) { 
       Terminal.printLine("Error, your tuple is empty, use insert number to insert a number!"); 
      } else { 
       Terminal.printLine("" + linkedTuple.max()); 
      } 
      break; 
     case "info": 
      Terminal.printLine(linkedTuple.toString()); 
      break; 
     case "quit": 
      System.exit(1); 
      break; 

     } 
     command = Terminal.readLine(); 
    } 

} 

내가 명령을 입력 한 후 첫 번째 대신 호출됩니다 다른 하나를 입력합니다. 예를 들어 : 정보 내 튜플이 이 내 튜플을 종료 인쇄 3 삽입 인쇄 다음 내 튜플 인쇄 등

+0

당신은'스위치 내부에'String'를 썼다을()'그리고 그것은 당신에게 오류를 제공하지 않습니다.? 너는 확인해 줄 수 있니?. – Saif

+0

아니 그게 내게 오류를주지 않을 롤 – NhatNienne

+0

@ Saif 당신은 스위치에서 jdk 7 이후 문자열을 사용할 수 있습니다. – SMA

답변

1
같은

사용 무언가 : 당신이 필요 이상으로뿐만 아니라

String[] array = "insert number".split(" "); 
.... 
switch (array[0]) { 
case "insert": 

성명서 교환의 순서

String command = Terminal.readLine(); 
String[] split = command.split(" "); 
while (command != null) { 

to

String command = Terminal.readLine(); 
String[] split; 
while (command != null) { 
    command = Terminal.readLine(); 
    split = command.split(" "); 

매번 사용자 입력을 요청하고 사용자 입력을 요청할 수 있도록 사용자가 입력 한 새 명령을 분리하십시오.

+0

그럼 오히려 String [] array = 명령을 사용합니다.split (""); switch (array [0]) {case "insert": 또한 숫자를 제거하고 그 문제를 해결해야합니다 ^^ 덕분에 문제가 해결됩니다. – NhatNienne

+0

잘 구현했는데 Eclipse에서 내 응용 프로그램을 실행하고 터미널에 입력하면 "info"(현재 숫자 배열 (표준 : {1})을 반환합니다.) 1로 인쇄하고 있지만, 3을 입력하면 여전히 1로 인쇄됩니다 (내 정보 명령과 같이). 이제 다시 실행하고 시작합니다. 정보 대신 삽입 3을 사용하고 정보를 다시 호출하면 아무 것도하지 않습니다. (업데이트 된 주 스레드) – NhatNienne

+0

전체 코드 게시 수정을 질문에 붙여주십시오. – SMA

0

대답 편집 한 후 : 루프의 끝에서

당신은

command = Terminal.readLine(); 

을하지만 당신은 새 명령을 분할하지 않습니다. 결과적으로 switch 문은 여전히 ​​이전 분할을 봅니다.

그래서 당신은에 루프의 끝 부분 변경해야

command = Terminal.readLine(); 
split = command.split(" "); 
+0

내 명령이 다음과 같을 것으로 기대할 수 있습니다. "명령 번호" (기본 스레드 업데이트) – NhatNienne

+0

원하는 경우 한 공간으로 나눌 수 있습니다. 유연성을 제공하는 것이 더 좋다고 생각하지만 원하는 경우 언제든지 코드의 수준을 줄일 수 있습니다. – RealSkeptic

+0

우리는 우리가 요구하는 것에 좀 제한되어 있습니다 :/실제로는 "더 많이"할 수는 없습니다 – NhatNienne

관련 문제