2017-11-27 9 views
0

まったく新しいJavaで、悪夢を抱いています!私は昇順に並べ替えることができた235886の単語shuffled.txtのリストを持っていますが、実行には一生かかるので、私は結果をtxtファイルに保存することができると考えていました。私はこれについてどうやって行くのですか?結果をtxtファイルに保存し、プリントラインを使用しないでください。

感謝の気持ちで助けられました。 歓待

public class Main { 
static final int NUMWORDS = 235886; 
static final String FILENAME = "shuffled.txt"; 

public static void main(String[] args) { 
    String[] words = readWords(FILENAME, NUMWORDS); 
    String[] myStringArray = readWords(FILENAME, NUMWORDS); 
    sortedWords(words); 
} 

// 5. Write code to build a sorted version of the list (in ascending order) 
public static void sortedWords(String unsorted[]) { 
    sort(unsorted); 

    for (int n=0 ; n < unsorted.length; n++) { 
     System.out.println(unsorted[n]); 
     // return unsorted; 
    } 

}static void sort(String[] unsorted){ 

    for (int i =0; i< unsorted.length; i += 1) { 
     int j = findMinIndex(unsorted, i + 1, i); 
     if (j != -1) { 
      swap(unsorted, i, j); 
     } 
    } 
} 

static int findMinIndex(String[] numbers, int startIndex, int minIndex) { 
    if (numbers.length <= startIndex) { 
     return -1; 
    } 
    for (int i=startIndex; i < numbers.length; i += 1){ 
     if (numbers[i].length() > numbers[minIndex].length()){ 
      minIndex = i; 
     } 
    } 
    return minIndex; 
} 
static void swap(String[] numbers, int i, int j) { 
    String tmp = numbers[i]; 
    numbers[i] = numbers[j]; 
    numbers[j] = tmp; 
} 


private static String[] readWords (String filename,int count){ 
    String[] words = new String[count]; 

    try (BufferedReader br = new BufferedReader(new FileReader(filename))) { 
     int i = 0; 
     for (String line; (line = br.readLine()) != null && i < count;) { 
      words[i++] = line; 
     } 
    } catch (java.io.IOException e) { 
     System.err.println("File: " + filename + " could not be found."); 
    } 
    return words; 
} 
} 
+0

、あなたはそれらを読んで同様の道を行くだろう。 'BufferedReader'の代わりにあなたは...よく。 'BufferedWriter'が必要です。ファイルに文字列/複数の文字列を書き込む方法の例については、簡単にGoogleを使用できます。 – Korashen

+0

ファイルからの読み方を知っていれば、書き込むこともできます。そこには多くのチュートリアルがあります。しかし、あなたの主な問題は出力ではなく、むしろO(n^2)のコードの複雑さを疑うでしょう:あなたは配列全体を反復していますし、findMinIndex()良いソートアルゴリズムは、複雑さがO(log(n))の複雑さを持つ必要があります。235kワードの場合、約270億回ではなく、約300万回の反復が必要です。 ?Arrays.sort(...) 'を使用していませんか? – Thomas

+0

未使用時に' myStringArray'にファイルを2度読み込むことはありません。 – yacc

答えて

0

"私の結果をtxtファイルに保存してください。"これはあなたのString[] words配列のすべてのシングルをどのように配置するかです。

import java.io.FileWriter; 

String[] words; //Imagine this has a lot of data inside 
try { 
    FileWriter writer = new FileWriter("output.txt"); 
    for(String str: words) { 
    writer.write(str); 
    writer.write("\n"); 
    } 
    writer.close(); 
} 
catch (Exception e) 
{ 
    System.out.println("EXCEPTION: " + e); 
} 
+0

乾杯、ジョー、すごくすみませんが、これは私の頭の中でやっています。私がすでに持っているものにコードを入れますか?ありがとうございました –

+0

'sortedWords(words);の後ろに、単語と呼ばれる配列をソートするときにtryとcatchの部分を入れてください' for "部分を理解できない場合は、配列 "words"の中にある各文字列( "str"という名前)に対して、あなたが見つけたすべての行を単語に、そして復帰するように書いてください。これを他の人を助ける答えに印を付けることを検討してください:) – joemartin94

+0

ここではtry-catchループでfor文をprint文に置き換えます。 – Touniouk

0

あなたはこの1つにあなたの方法sortedWordsを変更することができます(Javaの8必要とする、または9):トリックを行うと、比較的簡単であるべき

public static void sortedWords(String unsorted[]) throws FileNotFoundException { 
    sort(unsorted); 

    try(PrintWriter out = new PrintWriter("sorted_words.txt")) { 
     Arrays.stream(unsorted).forEach(out::println); 
    } 

} 

。以下は文字の広い範囲をサポートするためのUTF-8をサポートする代替手段です。

public static void sortedWords(String unsorted[]) throws IOException { 
    sort(unsorted); 

    try(PrintWriter out = new PrintWriter(new OutputStreamWriter(
      new FileOutputStream("sorted_words.txt"), "UTF-8"), true)) { 
     Arrays.stream(unsorted).forEach(out::println); 
    } 

} 

あなたはこれにmainメソッドのシグネチャを変更する必要があります:

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

コードようにコンパイルする。

0

printlnの中のforループをsortedWords()の範囲で削除します。 mainsortedWordsへの呼び出しsorted_words.txtファイルへの出力にこれを追加した後:ファイルに結果を書き込むには

java.nio.file.Files.write(Paths.path("sorted_words.txt"), Arrays.asList(words)); 
関連する問題