2012-05-26 2 views
2

파일을 읽고 텍스트가 회문인지 아닌지 확인하는 프로그램을 만들려고합니다. 코드가 컴파일되지만 실제로 작동하지 않습니다.java 다음에 문자열을 지정하거나 문자로 나누기 위해

문제는 완전한 토큰을 문자로 나누거나 문자를 문자열에 할당하여 push (대기열에 넣기)의 각 문자 나 숫자를 stack (대기열)에 넣는 방법을 모른다는 것입니다. 누구든지이 문제에 대한 해결책을 제시 할 수 있습니까? 대신

char temp = s.next().charAt(i); 

public static void main(String [] args) throws IOException{ 
    StackReferenceBased stack = new StackReferenceBased(); 
    QueueReferenceBased queue = new QueueReferenceBased(); 
    Scanner s = null; 
    String fileName=args[0]+".txt"; 
    int symbols = 0; 
    int lettersAndDigits =0; 
    int matches = 0; 

    try{ 
     s = new Scanner(new File(fileName)); 
     while(s.hasNext()){ 
     String current = s.next(); 
     for(int i=0;i<current.length();i++){ 
      char temp = s.next().charAt(i); 
      if(Character.isLetterOrDigit(temp)){ 
      stack.push(temp); 
      queue.enqueue(temp); 
      lettersAndDigits++; 

      } 
      else { 
      symbols++; 

      } 
     } 
     } 
     System.out.println("There are: " + " "+ symbols + " " +"symbols and " + " "+lettersAndDigits + " "+ "digits/letters"); 


    } 
    catch (FileNotFoundException e) { 
     System.out.println("Could not open the file:" + args[0]); 
    } //catch (Exception e) { 
     //System.out.println("ERROR copying file"); 
     finally { 
     if(s != null){ 
     s.close(); 
     } 
    } 
    while (!stack.isEmpty()){ 
     if(!stack.pop().equals(queue.dequeue())){ 
      System.out.println("not pali"); 
      break; 
     } 
     else { 
     ++matches; 
     } 
    } 

    if(matches==lettersAndDigits){ 
     System.out.print("pali"); 
    } 
    } 
+0

숙제입니까? 그렇지 않으면 문자열이 회문인지 여부를 확인하기에는 너무 많은 작업을 수행하고 있습니다. –

+0

예, 그 과제 : – Rennos

답변

1

당신은 당신이 파일에서 다음 토큰을 읽고에 따라 그 토큰의 i 번째 요소에 액세스하려고 s.next()를 호출하여

char temp = current.charAt(i); 

필요 첫 번째 문자열의 (current) 길이로, 읽은 토큰이 첫 번째 stoken보다 짧으면 예외가 발생합니다

+0

오, 고마워요! 다음에 코드를 신중하게 읽어야합니다. :) – Rennos