public static void loadFromFile(Student s) throws IOException { ArrayList<Student> students = new ArrayList<>(); Scanner scanner = new Scanner(new FileReader("students.txt")); while (scanner.hasNextLine()) { String line = scanner.nextLine(); String[] parts = line.split("\\|"); // 分隔符 String no = parts[0]; String name = parts[1]; String sex = parts[2]; int age = Integer.parseInt(parts[3]); String birthday = parts[4]; String college = parts[5]; int score = Integer.parseInt(parts[6]); Student s = new Student(no, name, sex, age, birthday, college, score); students.add(s); } scanner.close(); }
时间: 2024-02-14 07:04:52 浏览: 105
这段代码是用来从文件中读取学生信息并存储到一个 ArrayList 中的。首先,它创建了一个空的 ArrayList 和一个 Scanner 对象来读取文件。然后,它使用 while 循环来逐行读取文件,每行使用竖线字符(|)作为分隔符来将学生信息拆分成多个部分。接下来,它将每个部分分别解析为对应的数据类型,用这些数据来创建一个新的 Student 对象,并将其添加到 ArrayList 中。最后,它关闭了 Scanner 对象,完成了文件读取。需要注意的是,在方法的参数中传入了一个 Student 对象,但是在方法中又重新创建了一个同名的 Student 对象,这可能会导致编译错误。
相关问题
在delphi7中,如何用TXMLDocument这个类访问下面这个xml中的"商品名称"这个节点的值:<?xml version="1.0" encoding="gb2312"?> <inv> <fpzl>s</fpzl> <成品油>0</成品油> <getmw/> <CheckEWM/> <PriceKind>1</PriceKind> <autoxxb>0</autoxxb> <购方名称>重庆缙嘉嘉商贸有限公司</购方名称> <购方税号>91500117MA7KPJXP0Y</购方税号> <购方银行帐号>中国银行重庆合川支行113078682068</购方银行帐号> <购方地址电话>重庆市合川区草街拓展园区15723038760</购方地址电话> <税率>0</税率> <备注/> <开票人>张三</开票人> <复核人>周雯燕</复核人> <收款人>陈溢倩</收款人> <销方银行帐号>中国银行鄯善县新城东路支行107670942234</销方银行帐号> <销方地址电话>广州市番禺区456315896</销方地址电话> <合计金额>995575.22</合计金额> <合计税额>129424.78</合计税额> <销售单据编号>HS.GY.DBHS20230526-0025121</销售单据编号> <销方名称>航信培训企业</销方名称> <销方税号>440001999999179</销方税号> <原发票代码/> <原发票号码/> <通知单编号/> <电子邮箱/> <手机号/> <开票日期/> <红冲原因></红冲原因> <details> <detail> <商品编号/> <商品名称>金属硅鿃</商品名称> <规格型号/> <计量单位>吨</计量单位> <税收分类编码>1080208</税收分类编码> <数量>75</数量> <单价>15000</单价> <金额>1125000</金额> <税额>129424.78</税额> <优惠政策名称/> <税率>13</税率> <零税率标志/> </detail> </details> <清单标志>0</清单标志> </inv>
可以使用以下代码来访问节点值:
```delphi
var
XMLDoc: TXMLDocument;
Node: IXMLNode;
begin
XMLDoc := TXMLDocument.Create(nil);
try
XMLDoc.LoadFromFile('file.xml');
Node := XMLDoc.DocumentElement.ChildNodes.FindNode('details').ChildNodes.FindNode('detail').ChildNodes.FindNode('商品名称');
if Assigned(Node) then
ShowMessage(Node.Text);
finally
XMLDoc.Free;
end;
end;
```
其中,'file.xml' 是你的XML文件路径。以上代码将会输出 "金属硅鿃"。
void loadFromFile(const string& filename) { ifstream file(filename); string line; int number = 1; Athlete* current = new Athlete{ 0, 0, nullptr }; head = current; while (getline(file, line)) { float result = stof(line); Athlete* newAthlete = new Athlete{ number++, result, nullptr }; current->next = newAthlete; current = newAthlete; } current->next = nullptr; current = head; head = head->next; delete current; } void sortResults() { Athlete* i = head->next; if (i == NULL) return; else if (i->next == NULL) return; Athlete*current = head->next; i = i->next; while (i) { if (current->result <= i->result) { current = current->next; } else { Athlete* p1 = head; while (p1->next->result <= i->result) { p1 = p1->next; } current->next = i->next; i->next = p1->next; p1->next = i; } i = current->next; } }改成能够从文件每一个数据都参与排序
可以将loadFromFile()函数中的Athlete对象的创建放到while循环内部,并且将newAthlete的next指针初始化为head,这样每一次创建的Athlete对象都会插入到链表头部,即每个数据都会参与排序。修改后的代码如下:
```
void loadFromFile(const string& filename)
{
ifstream file(filename);
string line;
int number = 1;
head = new Athlete{ 0, 0, nullptr };
while (getline(file, line))
{
float result = stof(line);
Athlete* newAthlete = new Athlete{ number++, result, head };
head = newAthlete;
}
}
void sortResults()
{
Athlete* i = head->next;
if (i == NULL) return;
else if (i->next == NULL) return;
Athlete* current = head->next;
i = i->next;
while (i)
{
if (current->result <= i->result)
{
current = current->next;
}
else
{
Athlete* p1 = head;
while (p1->next->result <= i->result)
{
p1 = p1->next;
}
current->next = i->next;
i->next = p1->next;
p1->next = i;
}
i = current->next;
}
}
```
阅读全文