2015-02-05 4 views
0

Minesweeper의 기본 비 재귀, 비 GUI 양식에 대한 코딩 프로젝트를 수행하고 있습니다. [ "공개"/ "R"] [INT] [INT]형식이 정확한 입력을 확인하는 방법은 무엇입니까?

: 명령 (공개 추측 마크)를 마킹

: 요구 사항 중 하나는 입력 명령이 엄격과 같이 포맷되어야한다는 도움말 및 종료 : [ "help"/ "h"] 또는 [ "quit"/ "q"]

이러한 제한 사항을 벗어나는 입력은 잘못된 것으로 간주되어야합니다. 공개에 대한 내 코드는 다음과 같습니다.

case "reveal": 
case "r": 
    roundsCompleted ++; 
    if(input.hasNextInt()){ 
     par1 = input.nextInt(); 
    } 
    else{ 
     commandIn = null; 
    } 
    if(input.hasNextInt()){ 
     par2 = input.nextInt(); 
     correctInput = true; 
    } 
    else{ 
     commandIn = null; 
    } 


    if(correctInput && isInBounds(par1, par2)){ 
     reveal(par1, par2); 

여기는 모두 스위치 설명에 포함되어 있습니다. commandIn = null 문은 "command not recognized"를 출력하는 기본 경우를 던지도록 설계되었습니다. 내 문제의 일부는 여기에 두 개의 별도의 if-else 문에 있음을 알았습니다. 또 다른 문제는 input.hasNextInt()가 처음 것 다음에 int가 없을 때 false로 평가되는 것 같지 않다는 것입니다.

이 문제의 핵심은 위에 나열된 형식으로이 명령을 완전히 제한하는 것입니다. 누구든지이 문제에 대해 어느 정도 통찰력을 줄 수 있습니까? 감사.

+0

또는 'hasNextInt'의 필요성을 피할 수 있습니까? 정규식을 사용하고 계십니까? '/^[a-z] + \ d {2} $ /'같은 것이 있습니까? 그것이 틀린 경우에 사과, 나의 정규식 녹슨이다. –

답변

1

뭔가 좋은 입력하거나 또는 당신이 좋아 스위치 케이스를 사용할 수있는 일치있어 후 그냥 다음

String input = "r 3 4"; 
    if (input.matches("^(help|h|quit|q|((r|reveal) \\d \\d))$")) 
     //switch case 
     System.out.println("match"); 

    else 
     //null string 
     System.out.println("no match"); 

쉬울 것의 원인이되지 않을 경우 첫번째 볼 regex을 사용하십시오 "계시"또는 "r"의 경우, 나는 단지 split()을 사용하여 배열로 변환하여 다른 x 및 y 좌표를 얻습니다.

+0

와우 그래, 네가 할 수 있다는 것을 몰랐어. 내가 정규식에 새로운 오전, 나는 순수 자바 솔루션을 구현하려고했지만 이것은 훨씬 더, 감사합니다. – user3522016

+0

언제든지 멋진 프로젝트처럼 행운을 빈다. http://rubular.com/을 사용하여 정규식이 일치하는 입력을 빠르게 확인하면 유용 할 수 있습니다. – drop27