2016-10-26 3 views
1

私は独自のテキストバイナリソートメソッドを作成しようとしていますが、コンパイルは成功しましたが、ソートジョブは完了せず、null値が返されます。誰かが問題を指摘するのを助けてもらえますかどうもありがとう!! merge()(Javaテキスト処理)テキストメソッドと結果をヌルにソートしますか?

class mergesort{

//main method 
public static void main(String [] args) throws IOException{ 

    String [] words = readWords(args[0]); 

    long t1 = new Date().getTime(); 
    mergesort(words); 
    long t2 = new Date().getTime(); 
    System.out.println("execution time:" + (t2 - t1) + " milliseconds"); 

    prWords(words); 
} 

//method for reading file 
public static String [] readWords(String fn)throws IOException{ 

    BufferedReader br = new BufferedReader(new FileReader(fn)); 
    String line = ""; 
    StringBuilder allwords = new StringBuilder(); 
    while ((line = br.readLine())!= null){ 
     String [] items = line.trim().split("\\s+"); 
     allwords.append(convertCase(items[0])+"\t"); 
     } 
     br.close(); 
     return allwords.toString().split("\t"); 
} 

//Convert Case method 
public static String convertCase(String n){ 

     String firstWd = n;   
     firstWd = n.charAt(0) + n.substring(1).toLowerCase(); 

     return firstWd; 
} 

public static String [] sortedWs = {}; 
public static void mergesort(String [] Ws){ 
    sortedWs = new String[Ws.length]; 
    mergesort(Ws, 0, Ws.length); 
} 

public static void mergesort(String [] Ws, int bgn, int end){ 
    if (end - bgn == 1) return; 
    int mid = (bgn+end)/2; 
    mergesort(Ws, bgn, mid); 
    mergesort(Ws, mid, end); 
    merge(Ws, bgn, end); 
} 

public static void merge(String [] Ws, int bgn, int end){ 

    int mid = (bgn+end)/2; 
    int b1 = bgn; 
    int b2 = end; 

    int x = 0; 

    while (b1 < mid && b2 < end) { 
     if (Ws[b1].compareTo(Ws[b2]) <= 0){ 
      sortedWs[x] = Ws[b1]; b1++; x++; 
     } else { 
      sortedWs[x] = Ws[b2]; b2++; x++; 
     } 
    } 
    //copy the rest 
    if (b1 >= mid) 
     while (b2 < end) { sortedWs[x] = Ws[b2]; b2++; x++; } 
    if (b2 >= end) 
     while (b1 < mid) { sortedWs[x] = Ws[b1]; b1++; x++; } 

    for(int i = 0; i < end-bgn; i++) { 
     Ws[bgn+i] = sortedWs[i]; 
    } 

} 

public static void prWords(String [] strs){ 

    for (String x : strs){ 
    System.out.println(x); 
    } 
} 

答えて

0

このライン:

int b2 = end; 

私はそれがあるべきと考えている。この変更に伴い

int b2 = mid; 

テストランのカップルに正しい結果が得られぼくのコンピュータ。

+0

どうもありがとうございます、私は不自由な方です! lol – Yoyashi

+0

それは私たちのほとんどに共通しています。 :-)ある時点で、デバッガを使うことを学びます。それは、そのような小さなエラー(およびそれ以上のもの)を分類するための素晴らしいツールです。 –

+0

@ Yoyashi、それについて言及してくれてありがとうございます。しかし、あなたの質問履歴を見てみると、最も役立つ回答を受け入れたことを忘れているようです。 (答えの左に目盛り)[リンク](http://stackoverflow.com/help/someone-answers) –

関連する問題