2012-08-02 3 views
0

다음 달에 시험을 치러 몇 가지 기본적인 문제를 조사하고 있습니다. 이것은 하나의 문장으로 몇 문장을 입력하고 어떤 경우에는 '패턴'을 포함하는 문장을 다시 인쇄해야하는 프로그램입니다.자바에서 패턴/배열 문제가 발생했습니다

내 시도는 아래 내가 그것을 실행하려고 다음과 같은 오류가 나타납니다 그러나 그것은 컴파일 :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 
at Grep.main(Grep.java:18) 
import java.util.Scanner; 
import java.io.*; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

class Grep { 

    public static void main(String[] args) { 

     Pattern pattern = Pattern.compile("[Pp]attern"); 
     String sentences[] = new String[10]; 
     Scanner scanner = new Scanner(System.in); 

     System.out.println("Please enter some sentences: "); 

     for (int i = 0; i <= sentences.length; i++) { 
      String s = scanner.next(); 
      sentences[i] = s; 
     } 

     for (int i = 0; i < sentences.length; i++) { 
      Matcher matcher = pattern.matcher(sentences[i]); 
      while (matcher.find()) { 
       System.out.println(sentences[i]); 
      } 
     } 
    } 
} 

답변

0

<=의 사용 것처럼이보십시오. 그것은 작동합니다.

팁 : 입력이 전체 문장을 읽도록 nextLine()을 사용해야합니다. 그리고 for 루프 내에서 if 문에 대해 while 루프를 전환했습니다. 두 개의 루프가 필요 없습니다. 그리고 첫 번째 for 루프를 한 줄로 압축했습니다. 잠깐 필요할 때만 문자열 변수를 만들 필요가 없습니다. 그 단계를 완전히 건너 뛰고 요점을 잡으십시오! 행운을 빌어, 희망이 도움이! 다음은

은 너의 거울 프로그램입니다 그러나 이제 아래

import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Grep 
{ 
    public static void main(String[] args) 
    { 
     Pattern pattern = Pattern.compile("[Pp]attern"); 
     String sentences[] = new String[3]; 
     Scanner scanner = new Scanner(System.in); 

     System.out.println("Please enter some sentences: "); 

     for (int i = 0; i < sentences.length; i++) 
      sentences[i] = scanner.nextLine(); 

     for (int i = 0; i < sentences.length; i++) 
     { 
      Matcher matcher = pattern.matcher(sentences[i]); 
      if (matcher.find()) 
       System.out.println(sentences[i]); 
     } 
    } 
} 

내가이 같은 프로그램을 작성하는 방법입니다 작동합니다. 명확화를 위해 포함 된 설명

import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Grep 
{ 
    public static void main(String[] args) 
    { 
     // Initialize and Declare Variables 
     Pattern pattern = Pattern.compile("[Pp]attern"); 
     String sentences[] = new String[3]; 
     Scanner scanner = new Scanner(System.in); 
     int foundCount = 1; 


     // Present A Title For The End User 
     System.out.println("This Program Will Catch Sentences With The Term Pattern.\n"); 


     // Read The Inputs From The Users 
     for (int i = 0; i < sentences.length; i++) 
     { 
      System.out.print("Enter Sentence #" + (i+1) + ": "); 
      sentences[i] = scanner.nextLine(); 
     } 


     // Line Break 
     System.out.println(); 


     // Write Sentences That Include The Term Pattern 
     for (int i = 0; i < sentences.length; i++) 
     { 
      Matcher matcher = pattern.matcher(sentences[i]); 
      if (matcher.find()) 
      { 
       System.out.println(foundCount + ") " + sentences[i]); 
       foundCount++; 
      } 
     } 
    } 
} 
+0

도움 주셔서 대단히 감사합니다. 명령 줄에서 검색어를 호출하는 방법에 대한 도움말 예를 들어 입력에서 패턴을 검색하고 싶다면 'Java Grep pattern'을 호출하십시오. – BLL27

3
for (int i = 0; i <= sentences.length; i++) { 

가 배열에 포함 된 항목을? 마지막 색인은 무엇입니까? 루프가 사용하는 마지막 인덱스는 무엇입니까? 귀하의 루프 액세스는 총 몇 군데입니까? 당신은 0에서 시작하기 때문에

0
for (int i = 0; i <= sentences.length; i++) { 

<= 필요 <을 할 당신이 10 개 항목, 그래서 i

for (int i = 0; i < sentences.length; i++) 

당신 '을 시도 9.

+0

굉장하고, 완전히 놓쳤습니다. 고맙습니다. – BLL27

0

0에서 가야 괜찮을거야 :)

+0

굉장한, 완전히 그것을 놓쳤다. 고맙습니다. – BLL27

0

코드의 :18에 문제가 있습니다.이어야합니다.

당신은 당신의 코드에서 다음for 루프에서 자신이 < 대신

+0

Java는 일반적으로 0 기반 색인을 사용하므로 마지막 요소는 위치 (크기 -1)에있게됩니다. –

관련 문제