2016-11-02 15 views
0

私は、ファイルを引っ張り、1)母音数と2)単語長で並べ替えるマルチソートを行っています。私は検索しようとしたと私は昨日投稿した私はされている必要がありますよりも混乱。昨日から問題を整理しましたが、残っているものが1つ残っていることを除いては、私は通過できません。ArrayListとArray multiSort

私はクリアとプリントの部分に到達するまで、最初のパスのほぼすべてのスタートからです。

IVEにはのコード全体が含まれています。問題がどこで発生するのかわからないため、エラーが多発しているのでスタックも含めました。このセクションでは、一見、私が追加でエラーが出る問題

private static String[] firstPass(String[] initialList) { 
    ArrayList<LinkedList<String>> vowelQueues = getQueues(highestVowelCount(initialList) + 1); 
    for (String word : initialList) { 
     vowelQueues.get(numberOfVowels(word)).add(word); 
    } 
    displayQueues("Sorted by vowel count ... \n" , vowelQueues); 
    return emptyQueues(vowelQueues); 
} 

private static int highestVowelCount(String[] initialList) { 
    int highCount = 0; 
    for (String word : initialList) { 
     int vowelCount = numberOfVowels(word); 
     if (vowelCount > highCount){ 
      highCount = vowelCount; 
     } 
} 
    return highCount; 


private static int numberOfVowels(String word) { 
    int vowelCount = 0; 
    for (char c : word.toCharArray()) { 
     if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') 
      vowelCount++; 
     } 
    return vowelCount; 
} 

OF FINE

public static void main(String[] args) throws FileNotFoundException { 
    String[] theList = readStoreFile(); 
    displayArray("Word in the file ...", theList); 
    firstPass(theList); 
} 


private static String[] readStoreFile() throws FileNotFoundException { 
    File file = getFile(); 
    String[] initialList = writeFile(file); 
    return initialList; 
} 

private static File getFile() { 
    String homedir = System.getProperty("user.home"); 
    System.out.print("homedir = " + homedir); 
    JFileChooser jfc = new JFileChooser(new File(homedir)); 
    jfc.showOpenDialog(null); 
    File file = jfc.getSelectedFile(); 
    return file; 
} 

private static String[] writeFile(File file) throws FileNotFoundException { 
    Scanner scanner = new Scanner(file); 
    System.out.println("File Name ... " + file); 
    ArrayList<String> initialList = new ArrayList(); 
    while (scanner.hasNext()) { 
     String word = scanner.next().toLowerCase(); 
     initialList.add(word); 
    } 
    return changeToArray(initialList); 
} 

STARTワークス

、これは私がの量を追加しようとしています、他の誰かがアシストしました。キューの総数が最大の母音数+ 1になります。

private static ArrayList<LinkedList<String>> getQueues(int i) { 
    ArrayList<LinkedList<String>> queues = new ArrayList(i); 
    for (int count = 0; count < i; i ++) { 
     queues.add(new LinkedList()); 
    } 
    return queues; 
} 

private static void displayArray(String intro, String[] array) { 
    System.out.println(intro); 
    int count =0; 
    for (String printWord : array){ 
     System.out.print(printWord + " "); 
     count ++; 
     if (count == 11) { 
      System.out.println(); 
     } 
    } 

} 

private static String[] changeToArray(ArrayList<String> initialList) { 
    String[] array = new String[initialList.size()]; 
    for (int count = 0; count < array.length; count ++) { 
     array[count] = initialList.get(count); 
    } 
    return array; 
} 

private static void displayQueues(String intro, ArrayList<LinkedList<String>> queues) { 
    System.out.println(intro); 
    for (int count = 0; count < queues.size(); count++) { 
     System.out.print("Queue " + count + queues.get(count).toString() + "\n"); 
    } 
} 

private static String[] emptyQueues(ArrayList<LinkedList<String>> queues) { 
    ArrayList<String> delete = new ArrayList(); 
    for (LinkedList<String> queue : queues){ 
     while (!queue.isEmpty()) 
      delete.add(queues.remove()); 
    } 
     return changeToArray(delete); 
    } 
} 

ここは私のスタックです

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
at java.util.Arrays.copyOf(Arrays.java:3210) 
at java.util.Arrays.copyOf(Arrays.java:3181) 
at java.util.ArrayList.grow(ArrayList.java:261) 
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235) 
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227) 
at java.util.ArrayList.add(ArrayList.java:458) 
at textprocessing.MultiSortV2.getQueues(MultiSortV2.java:88) 
at textprocessing.MultiSortV2.firstPass(MultiSortV2.java:57) 
at textprocessing.MultiSortV2.main(MultiSortV2.java:26) 
/Users/jackschirtz/Library/Caches/NetBeans/8.1/executor-snippets/debug.xml:83: Java returned: 1 
BUILD FAILED (total time: 49 seconds) 
+1

for (int count = 0; count < i; count ++) { 

を試してみてください、あなたは、小さなサイズのファイルで試したことがありますか?あなたのJavaアプリケーションはメモリから外れています – Badr

+0

ファイルは "あなたに誕生日を祝う"です。なぜそれが問題を抱えているのかわかりません。それと私のブラウザだけが動作しています。 –

+0

そして、私はまだ私に関係なくエラーがありますか?私は、netbeansのエラーメッセージを通して理解できないコードの中に強調表示されている部分があることを意味しています。 –

答えて

2

getQueues(int i)に無限ループがあります。

forの3番目の引数は、i ++ではなく、count ++である必要があります。

代わり

for (int count = 0; count < i; i ++) { 
関連する問題