2012-02-19 3 views
0

몇 개의 구분 기호가있는 스도쿠 보드가있는 텍스트 파일을 스캔하고 있습니다. 이것이 샘플 입력이 될 것입니다.입력 스캔 및 특정 문자 건너 뛰기

1 - - | 4 5 6 | - - - 
5 7 - | 1 3 b | 6 2 4 
4 9 6 | 8 7 2 | 1 5 3 
======+=======+====== 
9 - - | - - - | 4 6 - 
6 4 1 | 2 9 7 | 8 3 - 
3 8 7 | 5 6 4 | 2 9 - 
======+=======+======  
7 - - | - - - | 5 4 8 
8 r 4 | 9 1 5 | 3 7 2 
2 3 5 | 7 4 $ | 9 1 6 

여기서 "|" 테두리 및 ===== + ==== + ====로 구분합니다. 나는이 코드를 | 및 ==== + === + ===하지만이 코드의 일부를 생략하고 그들에게 잘못된 문자를 선언하고

public static int [][] createBoard(Scanner input){ 

    int[][] nSudokuBoard = new int[9][9]; 

    for (rows = 0; rows < 9; rows++){ 

     for (columns = 0; columns < 9; columns++){ 

      if(input.hasNext()){ 

       if(input.hasNextInt()){ 
        int number = input.nextInt(); 
        nSudokuBoard[rows][columns] = number; 
       }//end if int 

       else if(input.hasNext("-")){ 
        input.next(); 
        nSudokuBoard[rows][columns] = 0; 
        System.out.print("Hyphen Found \n"); 
        }//end if hyphen 

       else if(input.hasNext("|")){ 
        System.out.print("border found \n"); 
        input.next(); 

       }// end if border 
       else if(input.hasNext("======+=======+======")){ 
        System.out.print("equal row found \n"); 
        input.next(); 
       }// end if equal row 

       else { 
        System.out.print("Invalid character detected at... \n Row: " + rows +" Column: " + columns +"\n"); 
        System.out.print("Invalid character(s) replaced with a '0'. \n"); 
        input.next(); 
       }//end else 

      }//end reading file 
     }//end column for loop 
    }//end row for looop 
return nSudokuBoard; 
}//end of createBoard 

을 배치 거기에 0의 추가의 I는 교사하지만 난 돈과 그것을 통해 이야기 이것을 고치는 방법에 대한 그의 제안을 기억하지 못합니다.

+0

James는 무엇을 편집 했습니까? –

+0

편집을 보려면 "1 분 전에 편집 됨"이라고 표시된 부분을 클릭하십시오. 이 경우 코드의 마지막 줄에 서식을 고정했습니다. –

+0

와우. 깔끔한 기능. 감사합니다 어니스트. –

답변

0

귀하의 루프는 테두리 또는 분할 소비에도 행과 열 카운터를 증가. 따라서 이전 문제에서 설명한 것처럼 다른 문제를 수정 한 후에도 모든 입력을 읽기 전에 행렬 채우기가 완료됩니다. 정수 나 대시를 사용한 후에 만 ​​조건부로 행과 열 카운터를 진행하려면 코드를 수정해야합니다. 이는 for 루프를 제거하고 첫 번째 if(input.hasNext())while으로 변경하고 정수 또는 대시를 사용하고 nSudokuBoard[rows][columns]의 값을 설정하는 곳에 rows++columns++을 추가하는 것을 의미합니다. rows을 늘릴시기와 columns을 언제 다시 0으로 설정할 지 결정하는 논리가 필요합니다.

또한 스타일리쉬하게 말하면 rowsrowcolumnscolumn으로 변경해야합니다.

+0

나는 각 행의 수를 계산하는 방법을 구현하려고 시도 할 것이지만 그 수는 계산할 수 없다. 하지만 아프지 만 정수와 대쉬를 소비 할 때만 행과 열을 늘리는 것에 대한 제안을 시도하십시오. –

+0

정확하게 제안을 구현했지만 오류 (ArrayIndexOutOfBounds)로 실행 중입니다 –

+0

값을 저장하는 것 외에 int 또는 대시 중 하나를 사용할 때마다, 이렇게해라 :'column ++; if (column == 9) {column = 0; 행 ++; }' –

1

hasNext에 대한 String 매개 변수는 정규식으로 처리됩니다. 당신은 특수 문자를 이스케이프해야합니다

else if(input.hasNext("\\|")){ 

else if(input.hasNext("======\\+=======\\+======")){ 

http://ideone.com/43j7R

+0

와우. 이데one 사이트에 대한 멋진 링크. 덕분에 아프고 구현이 후속 조치. –

+0

고마워요! 귀하의 제안은 완벽하게 작동했습니다. –