2014-01-28 79 views
1

創建數組嘿,我有這樣的代碼在這裏:的Java:問題從文件

public class Levels { 
boolean newGame = true; 

public void newGame() { 
    while (newGame) { 
     int cLevel = 1; 

     List<String> list = new ArrayList<String>(); 

     try { 
      BufferedReader bf = new BufferedReader(new FileReader(
        "src/WordGuess/ReadFile/LevelFiles/Level_" + cLevel 
          + ".txt")); 
      String cLine = bf.readLine(); 
      while (cLine != null) { 
       list.add(cLine); 
      } 
      String[] words = new String[list.size()]; 
      words = list.toArray(words); 
      for (int i = 0; i < words.length; i++) { 
       System.out.println(words[i]); 
      } 

     } catch (Exception e) { 
      System.out 
        .println("Oh! Something went terribly wrong. A team of highly trained and koala-fied koalas have been dispatched to fix the problem. If you dont hear from them please restart this program."); 
      e.printStackTrace(); 
     } 
    } 
}} 

,這讓我這個錯誤:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown Source) at java.util.ArrayList.grow(Unknown Source) at java.util.ArrayList.ensureExplicitCapacity(Unknown Source) at java.util.ArrayList.ensureCapacityInternal(Unknown Source) at java.util.ArrayList.add(Unknown Source) at WordGuess.ReadFile.SaveLoadLevels.Levels.newGame(Levels.java:24) at Main.main(Main.java:29)

任何人的幫助,好嗎?謝謝!

+0

什麼大小的文件,你正在閱讀?當您的計算機內存不足時會拋出java.lang.OutOfMemoryError,因爲您正在Java中運行非常繁重的程序。 –

+0

@migueljimenezz:在這種情況下,文件的長度是不相關的,只要至少有一行 - 請參閱我的回答:) –

+1

_newGame_設置爲false的位置?我在這裏看到的是一個無限循環! –

回答

3

這就是問題所在:

String cLine = bf.readLine(); 
while (cLine != null) { 
    list.add(cLine); 
} 

你不讀下一行的中環(中cLine值不會改變) - 所以它只是要永遠循環下去。你想:

String line; 
while ((line = bf.readLine()) != null) { 
    list.add(line); 
} 

(正如在評論中指出,這也是一個無限外環因爲newGame會留真永遠...)

+0

Alexis Lecrec G.S 謝謝,夥計!你們都是對的!我沒有創造我的虛假陳述,並改變了現在的情況。你真的幫助我使用readLine()語句。我認爲這個方法可以讀取所有的行,但現在我明白了。它如同一行中所說的那樣讀取了「多線程」。對不起,這些簡單的東西打擾你。我是新來的,如果我可以評價你,請告訴我如何:)如果你能告訴我,我的代碼的結構是否適合現在猜字遊戲,這也將被讚賞。再次感謝你! – braumer

+1

別擔心,我們都從簡單的東西開始;) –

1

您正在閱讀一行,並繼續將其添加到列表導致內存不足。
修改代碼爲:

String cLine 
while(cLine = bf.readLine() != null) 
{ 
    list.add(cLine); 
}