2017-02-28 140 views
0

現在,這聽起來像是一個以前已經重複過的問題,但我已經與這個問題有其他原因的人一起研究了一天。Java變量不受影響

我有一個函數,讀取保存文件的一部分,並顯示它確實接收到正確的數據。所以錯誤在於整數變量完全忽略了新的變量,並且在實時調試器中沒有顯示任何變化,所以與其他許多帖子一樣,它不僅僅是一個重複的對象錯誤。我似乎無法指出這裏最主要的問題是什麼,這是阻止我回歸的最後一件大事。任何幫助都會很棒,如果我在網上錯過了關於這個話題的話,我會非常抱歉。

@Override 
public void read(List<String> data) { 
    //world positions are not being changed at all 

    System.out.println(data.get(1)); 
    int test = Integer.valueOf(data.get(1).replaceAll("[^\\d.]", "")); 
    worldXPos = Integer.valueOf(data.get(0).replaceAll("[^\\d.]", "")); 
    worldZPos = test; 
} 

另一類是給出了數據:

public void readSaveFunctions(){ 
    if(!gameSaves.exists()){ 
     gameSaves.mkdir(); 
    } 
    String currentLine; 
    try { 
     List<String> data = new ArrayList<String>(); 
     FileReader read = new FileReader(currentFile); 
     BufferedReader reader = new BufferedReader(read); 

     String key = ""; 
     while((currentLine = reader.readLine()) != null){ 
      if(currentLine.contains("#")){ 
       key = currentLine; 
       data = new ArrayList<String>(); 
      }else if(currentLine.contains("*end")){ 
       for(int i = 0; i < saves.length; i++){ 
        String tryKey = "#" + saves[i].IDName(); 
        if(tryKey.equals(key)){ 
         key = ""; 
         saves[i].read(data); 
        } 
       } 
      }else data.add(currentLine); 
     } 
     reader.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

解釋它的另一種方式是這樣的: - 到 - 步模式,所以我 調試器設置步驟失敗

代碼看到每條線以人的速度執行,然後我得到這樣的一條線,但所有設置變量的線都具有相同的效果:

worldXPos = Integer.valueOf(data.get(0).replaceAll("[^\\d.]", "")); 

並且調試器顯示具有不同數字的兩個整數,但即時類變量保持完全相同,在線路通過後調試器中無效。

更新: 我忘了提及該方法具有@override方法,似乎這@override可能會造成這個問題,現在我終於可以有遵循再次

+3

請發表一個[MCVE](http://stackoverflow.com/help/mcve),這裏沒有足夠的幫助我們,但*我的意思是整數變量完全忽略了新變量,在eclipse調試器中看整數變量被分配到不同的數字,但只是保持不變* **不是**一致的。它究竟是什麼意思**? –

+0

做任何你們需要更多的例子添加? – furProgrammer

+1

@furProgrammer不,但我們需要更好的解釋 –

回答

0

所以我發現我的答案的路徑:AWT線程設法激活從另一個類中調用一個方法,該方法在讀取之前更改整數。起初我真的不知道,因爲調試器只顯示其中一個線程,無法知道另一個正在主動將其更改爲早期版本。感謝所有的幫助:P。