我编写了这段代码,不知道如何按字母顺序从我的文件到另一个文件中对姓氏进行排序。
import java.io.*;
import java.util.*;
class Asmuo {
String pavarde;
String vardas;
long buvLaikas;
int atv1;
int atv2;
int atv3;
}
class Irasas {
Asmuo duom;
Irasas kitas;
}
class Sarasas {
private Irasas p;
Sarasas() {
p = null;
}
Irasas itrauktiElementa(String pv, String v, long laikas, int d0, int d1,
int d2) {
String pvrd, vrd;
int data0;
int data1;
int data2;
long lks;
lks = laikas;
pvrd = pv;
vrd = v;
data0 = d0;
data1 = d1;
data2 = d2;
Irasas r = new Irasas();
r.duom = new Asmuo();
uzpildymasDuomenimis(r, pvrd, vrd, lks, d0, d1, d2);
r.kitas = p;
p = r;
return r;
}
void uzpildymasDuomenimis(Irasas r, String pv, String v, long laik, int d0,
int d1, int d2) {
r.duom.pavarde = pv;
r.duom.vardas = v;
r.duom.atv1 = d0;
r.duom.buvLaikas = laik;
r.duom.atv2 = d1;
r.duom.atv3 = d2;
}
void spausdinti() {
Irasas d = p;
int i = 0;
try {
FileWriter fstream = new FileWriter("rez.txt");
BufferedWriter rez = new BufferedWriter(fstream);
while (d != null) {
System.out.println(d.duom.pavarde + " " + d.duom.vardas + " "
+ d.duom.buvLaikas + " " + d.duom.atv1 + " "
+ d.duom.atv2 + " " + d.duom.atv3);
rez.write(d.duom.pavarde + " " + d.duom.vardas + " "
+ d.duom.buvLaikas + " " + d.duom.atv1 + " "
+ d.duom.atv2 + " " + d.duom.atv3 + "\n");
d = d.kitas;
i++;
}
rez.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}
public class Gyventojai {
public static void main(String args[]) {
Sarasas sar = new Sarasas();
Calendar atv = Calendar.getInstance();
Calendar isv = Calendar.getInstance();
try {
FileInputStream fstream = new FileInputStream("duom.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String eil;
while ((eil = br.readLine()) != null) {
String[] cells = eil.split(" ");
String pvrd = cells[0];
String vrd = cells[1];
atv.set(Integer.parseInt(cells[2]), Integer.parseInt(cells[3]),
Integer.parseInt(cells[4]));
isv.set(Integer.parseInt(cells[5]), Integer.parseInt(cells[6]),
Integer.parseInt(cells[7]));
long laik = (isv.getTimeInMillis() - atv.getTimeInMillis())
/ (24 * 60 * 60 * 1000);
int d0 = Integer.parseInt(cells[2]);
int d1 = Integer.parseInt(cells[3]);
int d2 = Integer.parseInt(cells[4]);
sar.itrauktiElementa(pvrd, vrd, laik, d0, d1, d2);
}
in.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
sar.spausdinti();
}
}
答案 0 :(得分:3)
如果我做出一些不正确的假设,你将不得不原谅我,因为我不会说立陶宛语?所以你的变量和方法名称让我很难理解你的代码。
您似乎拥有自己的“人员”记录的链接列表结构。根据姓氏对记录进行排序有几种不同的方法。一种方法是编写一种方法,通过手动移动节点和破坏/重新创建节点之间的链接来对链表进行排序。
另一种方法是将列表转储到标准列表中,并使用Collections.sort()
和适当的Comparator
类对列表进行排序。
class Sarasas {
...
private List<Asmuo> sortList() {
// dump your list into an ArrayList
List<Asmuo> data = new ArrayList<Asmuo>();
Irasas node = p; // start with the Sarasas object's head node
while (node != null) {
data.add(node);
node = node.kitas;
}
// sort your list
Collections.sort(data, new AsmuoComparator() );
return data;
}
class AsmuoComparator implements Comparator<Asmuo>
{
public int compare(Asmuo p1, Asmuo p2)
{
return p1.pavarde.compareToIgnoreCase(p2.pavarde);
// I'm assuming pavarde is the surname?
}
}
现在,您可以使用为所需内容返回的List。按顺序遍历列表并对每个项目执行某些操作:
List<Asmuo> data = sortList();
for (Asmuo a : data) {
// write to file, etc...
}
祝你好运!如果我的任何假设都错了,请告诉我,所以我可以修改我的答案。
答案 1 :(得分:2)
虽然我对这段代码没有具体的评论,但坦率地说,由于我对你所使用的语言缺乏了解,我觉得很难阅读,作为一般方法,这就是我要解决的问题。你问的问题是:
这适用于任何Java对象类型,并且排序方法可以完全是任意的,或者基于数据的一些新颖特征。我很少使用这种方法,而且Java为您完成了大部分繁重工作,它可以最大限度地减少您的时间和精力投入。当Java已经准备好供你使用时,没有任何意义重新发明轮子。
答案 2 :(得分:0)
我很惊讶在这种情况下没有一个答案建议使用Collator。所以我只想补充说你应该使用Collator进行比较,如下所示
Collator collator = Collator.getInstance(new Locale(...));
Collections.sort(yourList, collator);
完整示例可以是found here
使用提示进行编辑,以便在RD01的代码中使用
在 RD01
提供的示例代码中添加Collator中可用的compare()方法,而不是 equalsIgnoreCase(...)