2014-01-16 3 views
1

원인 루프를 들어 쌌다 : UserInputViaCommand: match1, match2다음과 같이 내 출력을 얻을려고 문제

를하지만이 표시됩니다 :

UserInputViaCommand: match1, UserInputViaCommand: match2 나는이 첫 번째 내부에있는 루프에 대한 두 번째로 인한 알고, 그러나 나는 원하는 출력물을 얻는 것에 대해 확신 할 수 없다.

내 프로그램과 같이 명령 줄에서 실행 : java program name1 name2 < names.txt

내가 파일을 읽고 그 안에 이름을 정상화하고 사용자의 입력을 읽고 동일한 작업을 수행하고 그들을 인쇄 일치하는 경우.

try { 
    InputReader = new BufferedReader(new InputStreamReader(System.in)); 
    while ((nameFile = InputReader.readLine()) != null) { 
     //Normalising the input to find matches 
     nameFromFile = normalize(nameFile); 
     //Looping through each argument 
     for (int j = 0; j < ags.length; j++) { 
      // Appending text to the string builder 
      //Output.append(ags[j] + ":" + " "); 
      //Normalising the input to find matches 
      String result = normalize(ags[j]); 
      if (nameFromFile.equalsIgnoreCase(result)) { 
       Output.append(ags[j] + ":" + " " + nameFile + ", "); 
       //Output.append(ags[j] + ":" + " "); 
       //Output.append(nameFile + ", "); 
      } 
     } 
    } 
    System.out.println(Output); 
} 
catch (IOException e) { 
    System.out.println(e.getMessage()); 
} 
+1

흥미로운'for' 루프입니다. 왜 while 루프를 사용하지 않습니까? 당신은 기본적으로 그것을 '잠시'로 만들었습니다. – crush

+0

@crush 나는 변화의 미친 양을 만들었습니다, 나는 그것이 한 단계에서 while 루프라고 생각합니다. 나는 그것을 되돌려 놓고 내가 그걸 가지고 놀 수 있는지 알아볼 것이다. :) while 루프로 변경됨 :) –

+1

예제 출력이 코드와 일치하지 않는 것 같습니다. 결과물은'Name1 : name1, name2 : name2'와 같이 더 좋아야합니다. 그래서 그 동안 뭔가를 변경했거나 생략 한 코드가 중요한 부분입니다. –

답변

0

이 조건이 같을 것입니다 경우 명령 줄을 통해 사용자 입력이 별개의

그래서 당신의 내면이 될 것이라고 주어진, 이미 버퍼에 나타나는 ags[j] + ":"에 대한 수표를 사용하는 것입니다 수행하는 간단한 방법 :

if (nameFromFile.equalsIgnoreCase(result)) { 
    if (!output.toString().contains(ags[j] + ":")) 
     output.append(ags[j] + ":"); 
    output.append(" " + nameFile + ", "); 

} 
또 다른 가능성은 루프 '주문이 반전 될 수있다 할 수있다

, 당신은 초 그것을 통해 읽을 수있는 파일의 시작 추구 먼저 외부 루프에 output.append(ags[j] + ":");을 설정하고 사용자 인수를 읽어

뭔가 같은 : 그것이 아닌 경우

try { 

      RandomAccessFile raf = new RandomAccessFile(new File(
        "C://users//XX//desktop//names.txt"), 
        "rw"); 

      for (int j = 0; j < args.length; j++) { 
       output.append(args[j] + ":"); 
       while ((nameFile = raf.readLine()) != null) { 

        if (args[j].equalsIgnoreCase(nameFile)) { 
         output.append(" " + nameFile + ", "); 

        } 

       } 
       raf.seek(0); 
      } 
      System.out.println(output + "\r\n"); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

하나는 파일의 시작 추구의 비 효율성을 주장 할 수 있지만, 인수 (I 쉽게 파일의 시작 추구 RandomAccessFile을 사용) 따라서 병목 현상은 실현 가능한 옵션입니다.

+1

정말 고마워요. :) 첫 번째 예제는 매력적으로 작동합니다 :) –