gpt4 book ai didi

java - 更改嵌套循环中静态类变量的值

转载 作者:行者123 更新时间:2023-12-01 13:40:59 25 4
gpt4 key购买 nike

我在更改嵌套循环中的类变量的值时遇到问题 - 我不明白为什么。我猜这是因为该变量是静态。但它是一个静态方法,因为它用于从文件列出系统中的用户,所以它必须是静态的(我从主方法调用它以将文件读取到 TreeMaps)。是否无法从方法内重写静态类变量?如果可能的话——我到底做错了什么?

public class Loan{

protected int noOfLoans;
protected int noOfReturns;
protected User user=new User();
protected static Book book= new Book();
protected Map <Integer, Book> currentLoans=new TreeMap <Integer, Book>();
protected Map <Integer, Book> returned=new TreeMap <Integer, Book>();
protected static Map<Integer, Loan> loanList=new TreeMap<Integer, Loan>();

public static void main(String[] args){
readLoans();
}

public static void readLoans(){
loanList.clear();
BufferedReader reader = null;
try {
reader=new BufferedReader(new FileReader("loans.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line = null;
try {
line = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
while (line!=null) {
String[] splitOut=line.split("-");
String[] loan_User=splitOut[0].split(",");
String[] loan_CurrentLoans=splitOut[2].split(",");
String[] loan_Returned=splitOut[4].split(",");
Loan loan = new Loan();
loan.user.setFirstName(loan_User[0]);
loan.user.setSurname(loan_User[1]);
loan.user.setPersonalID(loan_User[2]);
for (int i = 1; i <= Integer.parseInt(splitOut[1]); i++) {
book.setName(loan_CurrentLoans[((Integer.parseInt
(splitOut[1])-1)*4)]);
book.setAuthorFirstname(loan_CurrentLoans[((Integer.parseInt
(splitOut[1])-1)*4)+1]);
book.setAuthorSurname(loan_CurrentLoans[((Integer.parseInt
(splitOut[1])-1)*4)+2]);
book.setISBN(loan_CurrentLoans[((Integer.parseInt
(splitOut[1])-1)*4)+3]);
loan.currentLoans.put(i, book);
}
for (int i = 1; i <= Integer.parseInt(splitOut[3]); i++) {
book.setName(loan_Returned[((Integer.parseInt
(splitOut[3])-1)*4)]);
book.setAuthorFirstname(loan_Returned[((Integer.parseInt
(splitOut[3])-1)*4)+1]);
book.setAuthorSurname(loan_Returned[((Integer.parseInt
(splitOut[3])-1)*4)+2]);
book.setISBN(loan_Returned[((Integer.parseInt
(splitOut[3])-1)*4)+3]);
loan.returned.put(i, book);
}
loan.setNoOfLoans(Integer.parseInt(splitOut[1]));
loan.setNoOfReturns(Integer.parseInt(splitOut[3]));
loanList.put(loanList.size()+1, loan);
try {
line=reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

这是供引用的输入行:

John,Doe,8012311213-2-a book,Author,Authorson,1234567890123,another book,Author,Authorson,2345678901234-1-a returned book,Author,Authorson,3456789012345

打印上面一行时我希望得到什么:

Current Loans:
1. a book by Author Authorson (1234567890123)
2. another book by Author Authorson (2345678901234)

Returned Loans:
1. a returned book by Author Authorson (3456789012345)

我目前得到的:

Current Loans:
1. a book by Author Authorson (1234567890123)
2. a book by Author Authorson (1234567890123)

Returned Loans:
1. a book by Author Authorson (1234567890123)

还有

readLoans();
System.out.println(loanList.get(2).currentLoans.get(1).toString());
System.out.println(loanList.get(2).currentLoans.get(2).toString());

返回

a returned book by Author Authorson (3456789012345)
a returned book by Author Authorson (3456789012345)

这让我相信我实际上无法创建静态 Book 对象的实例,但必须使其成为非静态并尝试在方法中创建该对象的实例。如果是这样 - 我该怎么做?

最佳答案

从这里开始,很难理解你怎么能理解得这么多,同时又如此困惑。我这么说并不是要侮辱您,只是想说我根本不确定我是否理解您的处境。

使用new创建实例。因此,在您不断覆盖一本静态书的两个循环中,您需要一个局部变量,将一本新书分配给它,然后设置字段。

关于java - 更改嵌套循环中静态类变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20778881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com