public Account(String id,double balance,double annuallnteresRate){ this.id=id; this.balance=balance; this.annuallnteresRate=annuallnteresRate; }其中this的作用是什么
时间: 2023-05-30 19:02:48 浏览: 50
this关键字代表当前对象,可以用来引用当前对象的成员变量或方法。在这个构造方法中,this.id表示当前对象的id属性,this.balance表示当前对象的balance属性,this.annuallnteresRate表示当前对象的annuallnteresRate属性。
相关问题
package com; class Account { String name; double balance; public Account(String name) { this.name=name; this.balance=0; } public synchronized void put(double value) { if(value>0) this.balance+=value; System.out.println("您的存款金额为"+value+"存款成功,余额为"+this.balance); } public synchronized double get( double value) { if(value<=0) return 0; if(value<=this.balance) this.balance-=value; else { value=this.balance; this.balance=0; } System.out.println("您的取款金额为"+value+"取款成功,余额为"+this.balance); return value; } } class SaveThread extends Thread{ private Account account; private double value; public SaveThread(Account account,double value) { this.account=account; this.value=value; } public void run() { try {Thread.sleep(1);} catch(InterruptedException ex) {} this.account.put(this.value); } } class FetchThread extends Thread{ private Account account; private double value; public FetchThread(Account account,double value){ this.account = account; this.value = value; } public void run(){ try{ Thread.sleep(1); } catch(InterruptedException ex){} this.account.get(this.value); } public static void main(String[] args) { Account wang =new Account("Wang"); (new SaveThread(wang,100)).start(); (new SaveThread(wang,200)).start(); (new SaveThread(wang,300)).start(); (new FetchThread(wang,100)).start(); (new FetchThread(wang,200)).start(); } }代码查错
在这段代码中,存在一些语法错误和逻辑问题,下面是修正后的代码:
```java
package com;
class Account {
String name;
double balance;
public Account(String name) {
this.name = name;
this.balance = 0;
}
public synchronized void put(double value) {
if (value > 0) {
this.balance += value;
System.out.println("您的存款金额为" + value + "存款成功,余额为" + this.balance);
}
}
public synchronized double get(double value) {
if (value <= 0)
return 0;
if (value <= this.balance) {
this.balance -= value;
System.out.println("您的取款金额为" + value + "取款成功,余额为" + this.balance);
return value;
} else {
System.out.println("您的取款金额为" + value + "取款失败,余额为" + this.balance);
return 0;
}
}
}
class SaveThread extends Thread {
private Account account;
private double value;
public SaveThread(Account account, double value) {
this.account = account;
this.value = value;
}
public void run() {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
this.account.put(this.value);
}
}
class FetchThread extends Thread {
private Account account;
private double value;
public FetchThread(Account account, double value) {
this.account = account;
this.value = value;
}
public void run() {
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
this.account.get(this.value);
}
}
public class Main {
public static void main(String[] args) {
Account wang = new Account("Wang");
(new SaveThread(wang, 100)).start();
(new SaveThread(wang, 200)).start();
(new SaveThread(wang, 300)).start();
(new FetchThread(wang, 100)).start();
(new FetchThread(wang, 200)).start();
}
}
```
修正后的代码中,主要修改了以下几个问题:
1. 在Account类的put方法和get方法中,需要用大括号括起来表示if语句的范围。
2. 在FetchThread类的get方法中,需要在取款失败的情况下打印错误信息。
3. 在SaveThread和FetchThread的run方法中,需要捕获InterruptedException异常并打印它的堆栈信息。
4. 在主函数中,需要将Main类声明为public,才能被其他类所访问。
经过以上修正,代码应该可以正确运行了。
优化代码package Bankaccount; import java.util.Comparator; //账户类实现Comparable接口 public class Account implements Comparable<Account> { private String name; private double balance; public Account(String name, double balance) { this.name = name; this.balance = balance; } public String getName() { return name; } public double getBalance() { return balance; } // 按照账户余额比较账户大小的方法 @Override public int compareTo(Account o) { if (this.balance > o.balance) { return 1; } else if (this.balance < o.balance) { return -1; } else { return 0; } } } //比较器类CompareName,按照账户名比较账户大小 class CompareName implements Comparator<Account> { @Override public int compare(Account o1, Account o2) { return o1.getName().compareTo(o2.getName()); } } public class Main { public static void main(String[] args) { Account account1 = new Account("Tom", 1000); Account account2 = new Account("Jerry", 2000); // 测试按照账户余额比较账户大小的方法 System.out.println(account1.compareTo(account2)); // -1 // 测试按照账户名比较账户大小的方法 CompareName compareName = new CompareName(); System.out.println(compareName.compare(account1, account2)); // -1 }
这段代码已经很简洁了,不过还有一些可以优化的地方:
1. 参数类型可以使用基本类型代替包装类,这样可以提高运行效率。
2. 使用三元运算符代替 if-else 语句,可以提高代码的简洁性。
3. 使用方法引用(Method reference)代替 Lambda 表达式,可以让代码更简洁易懂。
优化后的代码如下:
```
package Bankaccount;
import java.util.Comparator;
public class Account implements Comparable<Account> {
private String name;
private double balance;
public Account(String name, double balance) {
this.name = name;
this.balance = balance;
}
public String getName() {
return name;
}
public double getBalance() {
return balance;
}
@Override
public int compareTo(Account o) {
return Double.compare(this.balance, o.balance);
}
}
class CompareName implements Comparator<Account> {
@Override
public int compare(Account o1, Account o2) {
return o1.getName().compareTo(o2.getName());
}
}
public class Main {
public static void main(String[] args) {
Account account1 = new Account("Tom", 1000);
Account account2 = new Account("Jerry", 2000);
// 测试按照账户余额比较账户大小的方法
System.out.println(account1.compareTo(account2)); // -1
// 测试按照账户名比较账户大小的方法
CompareName compareName = new CompareName();
System.out.println(compareName.compare(account1, account2)); // -1
// 使用方法引用代替 Lambda 表达式
Comparator<Account> compareBalance = Account::compareTo;
}
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)