当我调用一个方法来返回一个值时,它会将其重置为0

时间:2015-11-03 16:30:35

标签: java swing

public void setSavingsBal(String q) throws FileNotFoundException, IOException
{
    try
        {
           BufferedReader in = new BufferedReader(new FileReader("logininf.txt"));
           String l = "";

           while ((l = in.readLine())!=null)
           {
             String [] var = l.split("#");
             if(var[0].equals(q))
             {  
                 System.out.println(var[2]);
                 savingsBal = Double.parseDouble(var[2]);

             }
           }

        }

以上,savingsBal的值为20

public double getSavingsBal()
{
        System.out.println(savingsBal);
    return savingsBal;
}

但是当我检索它时,它给出的值为0

private void btnGetBalanceActionPerformed(java.awt.event.ActionEvent evt) {                                              
    Client cl1 = new Client();
    double balance;
    balance = cl1.getSavingsBal();

似乎变量在原始set方法之后没有更新。

1 个答案:

答案 0 :(得分:2)

您在btnGetBalanceActionPerformed方法中创建了一个全新的Client对象,并且此对象与任何现有Client都没有关联。因此,即使您在现有Client对象中的某处更改了余额,也不会在您在此处创建的新值cl1中看到此状态更改。解决方案:不要创建新的Client对象,而是使用现有的Client对象。如何取决于未显示的代码,因为您需要以某种方式获取并使用对现有代码的引用。

所以而不是:

private void btnGetBalanceActionPerformed(java.awt.event.ActionEvent evt) {                                              
    Client cl1 = new Client();
    double balance;
    balance = cl1.getSavingsBal();

做的:

private void btnGetBalanceActionPerformed(java.awt.event.ActionEvent evt) {                                              
    // Client cl1 = new Client();
    double balance;
    balance = existingClientReference.getSavingsBal();

请注意,您将希望避免尝试使用静态变量解决此问题。