2017-02-28 116 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。