2014-04-09 5 views
-2

그래서 명령 줄에서 사전 순으로 입력 한 파일의 내용을 정렬하는 프로그램을 작성하려고합니다.병합 정렬 사전 순으로 미리 지정된 이름으로 작업했으나 명령 줄 파일로는 수행하지 않았습니다.

import java.io.*; 
import java.io.File ; 
import java.util.*; 
import java.util.Scanner ; 
import java.io.FileNotFoundException ; 

public class MergeSortLines { 
public static void main(String[] args) 
    throws FileNotFoundException { 
    loadArray(args[0]) ; 
} 

public static String[] loadArray(String fileName) 
    throws FileNotFoundException { 
    String[] myList = null ; 
    ArrayList<String> myArrayList = new ArrayList<String>(); 
    if ((fileName != null) && (!fileName.equals(""))) { 
    Scanner input = new Scanner(new File(fileName)) ; 
    while (input.hasNextLine()) { 
     String a = input.nextLine(); 
     myArrayList.add(a); 
    } 
    myList = myArrayList.toArray(new String[] {}); 
    System.out.println(Arrays.toString(myList)); 

    } 
return myList ; 
} 


public static void mergeSort(String[] a) { 
    if (a.length >= 2) { 
     String[] left = new String[a.length/2]; 
     String[] right = new String[a.length-a.length/2]; 

     for (int i = 0; i < left.length; i++) 
     { 
      left[i] = a[i]; 
     } 
     for (int i = 0; i < right.length; i++) 
     { 
      right[i] = a[i + a.length/2]; 
     } 

     mergeSort(left); 
     mergeSort(right); 

     merge(a, left, right); 
    } 
} 

public static void merge(String[] result, String[] left, String[] right) { 
    int i1 = 0; 
    int i2 = 0; 
    for (int i = 0; i < result.length; i++) { 
     if (i2 >= right.length || (i1 < left.length && 
          left[i1].compareToIgnoreCase(right[i2])<0)) { 
        result[i] = left[i1]; 
        i1++; 
      } else { 
        result[i] = right[i2]; 
        i2++; 
      } 
     } 
    } 
} 

가 컴파일 제대로하지만 난 : 내 "주"여기 내 코드의 인쇄 할 파일에 읽고 다음 배열 "myList에"를 "myArrayList"ArrayList에에서 복사와 함께 문제가 있어요 그것을 실행할 때 NoSuchElementException 오류 코드가 나타납니다. 내 질문은, 내가 스캐너에 대해 while 루프를 올바르게 수행 했는가? toArray()를 올바르게 활용하려면 어떻게해야합니까? 그리고 마지막으로, 내가 잘못된 아이디어를 가지고 있다면, 파일을 배열에 복사하는 올바른 방법은 무엇입니까? 감사합니다. 나는 어떤 도움을 주셔서 감사합니다! EDIT 뱀장어로 가득 찬 HoverCraft 덕분에 파일의 내용이 제대로 표시되었으므로 테스트를 시작할 때 코드에 입력 한 이름으로 작업 할 때 사전 순으로 정렬되지 않습니다! 어떤 아이디어?

+0

내가 확실하지 해요 머지 소트 내 목록을 정렬 할 수 있도록 그들을 실행하는 메소드를 호출 할 소홀히하여 'Scanner # hasNextXXX()'는 항상 같은 타입의'Scanner # nextXXX() '와 일치해야합니다. 따라서'while (input.hasNextLine()) '이라고하면, 하나의'input.nextLine()'이 뒤따라야합니다. –

+0

'myList ='로 시작하는 세 줄은 의미가 없습니다. 왜 마지막 호출이 중요 할 때 세 가지 다른 객체를 할당하려고합니까 ?? 또한, 어떤 라인이 당신의 예외를 던지고 있습니까? –

+0

오, 고마워! 이번에는 파일을 인쇄했지만 테스트했을 때의 알파벳순이 아니 었습니다. 그 이유는 무엇입니까? – GEARZ

답변

0

내 자신의 질문에 대답하기 위해, 나는이 문제에 있지만, 일반적으로 기여하는 경우 제대로