老师,麻烦看一下

老师,麻烦看一下

package com.practice1;

/**
* @author 谭昌
* @date 2021/4/18
*/
public class Bank {
//账户
   private String account;
   //余额
   private double balance;

   public String getAccount() {
return account;
   }

public void setAccount(String account) {
this.account = account;
   }

public double getBalance() {
return balance;
   }

public void setBalance(double balance) {
this.balance = balance;
   }

@Override
   public String toString() {
return "Bank{" +
"account='" + account + '\'' +
", balance=" + balance +
'}';
   }

public Bank(String account, double balance) {
this.account = account;
       this.balance = balance;
   }
//存款
   public synchronized void SaveAccount(){
//获取当前余额
       double balance = getBalance();

       try {
Thread.sleep(1000);
       } catch (InterruptedException e) {
e.printStackTrace();
       }
//修改余额
       balance+=100;
       setBalance(balance);
       System.out.println("存款之后的金额:"+balance);

   }
//取款
   public void TakeAccount() {
synchronized (this) {
//获取余额
           double balance = getBalance();

           //修改余额
           balance-=200;
           setBalance(balance);
           try {
Thread.sleep(1000);
           } catch (InterruptedException e) {
e.printStackTrace();
           }
System.out.println("取款之后的余额:" + balance);
       }
}
}
package com.practice1;

import java.util.Scanner;

/**
* @author 谭昌
* @date 2021/4/18
*/
public class SaveAccount implements Runnable{
private Bank bank;

   @Override
   public void run() {
/* Scanner sc = new Scanner(System.in);
       System.out.print("请放入您的钞票:");
       double saveMoney = sc.nextDouble();*/
       bank.SaveAccount();

   }

public SaveAccount(Bank bank) {
this.bank = bank;
   }



}
package com.practice1;

import java.util.Scanner;

/**
* @author 谭昌
* @date 2021/4/18
*/
public class TakeAccount implements Runnable{
private Bank bank;

   public TakeAccount(Bank bank) {
this.bank = bank;
   }

@Override
   public void run() {
/*  Scanner sc = new Scanner(System.in);
       System.out.print("您要取走的钞票:");
       double TakeMoney = sc.nextDouble();*/
       bank.TakeAccount();


   }
}
package com.practice1;

/**
* @author 谭昌
* @date 2021/4/18
*/
public class BankTest {
public static void main(String[] args) {
Bank bank = new Bank("农业银行", 1000);
       SaveAccount sa = new SaveAccount(bank);
       TakeAccount ta = new TakeAccount(bank);
       Thread t1 = new Thread(sa, "t1");
       Thread t2 = new Thread(ta,"t2");
       t1.start();
       t2.start();
       try {
t1.join();
           t2.join();
       } catch (InterruptedException e) {

e.printStackTrace();
       }
System.out.println(bank);
   }
}

在Bank类中,为什么我用修改余额用setBalance(balance-200),setBalance(banlance+100),和老师的结果不一样了

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,同学说的是出现了如下结果吧,比如

http://img1.sycdn.imooc.com//climg/607ce44809f32f4a04230107.jpg

如果是,那同学代码应该是这样书写的

http://img1.sycdn.imooc.com//climg/607ce43f0995edc706940602.jpg

如上所示,对应展示的就会出现问题,只展示初次获取的局部变量balance。

当直接获取成员属性balance,直接执行计算,就可以了,比如:

http://img1.sycdn.imooc.com//climg/607ce49f09cd9a5e05470613.jpg

祝学习愉快!

  • 慕楠枫桥 提问者 #1

    是的,谢谢老师

    2021-04-19 11:06:15
好帮手慕小班 2021-04-18 18:40:30

同学你好,同学是说那个结果不一样,老师测试贴出代码,课程中结果如下

http://img1.sycdn.imooc.com//climg/607c0c5c09af063f04550181.jpg

同学的结果

http://img1.sycdn.imooc.com//climg/607c0c6e097d397504210099.jpg

这二者结果是一致的,同学是想表达什么结果不一致呐,还麻烦同学将自己不一样的结果贴出。

祝学习愉快!

  • 提问者 慕楠枫桥 #1

    Bank类中那个+=/-=修改价格,我用setBalance(余额+-取钱/存钱)方法修改为什么结果和老师的不一致了,贴出的是我改之后的代码

    2021-04-18 19:16:25
  • 提问者 慕楠枫桥 #2

    好像是有点懂了,就是我把两步变成一步了,但是还想听老师解释一下

    2021-04-18 19:21:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师