Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java将姓氏按字母顺序从一个文件排序到另一个文件?_Java_Sorting - Fatal编程技术网

如何使用Java将姓氏按字母顺序从一个文件排序到另一个文件?

如何使用Java将姓氏按字母顺序从一个文件排序到另一个文件?,java,sorting,Java,Sorting,我写了这段代码,不知道如何将姓氏按字母顺序从我的文件排序到另一个文件 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

我写了这段代码,不知道如何将姓氏按字母顺序从我的文件排序到另一个文件

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();

    }
}

如果我做了一些不正确的假设,你必须原谅我,因为我不会说立陶宛语??所以你的变量和方法名让我很难理解你的代码

看起来您有自己的“个人”记录链表结构。有几种不同的方法可以根据姓氏对记录进行排序。一种方法是编写一种方法,通过手动移动节点并断开/重新创建节点之间的链接来对链接列表进行排序

另一种方法是将列表转储到标准列表中,并使用
Collections.sort()
和适当的
比较器
类对列表进行排序

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?
    }
}
Sarasas类{
...
私有列表分类列表(){
//将列表转储到ArrayList中
列表数据=新的ArrayList();
Irasas node=p;//从Sarasas对象的头节点开始
while(节点!=null){
数据添加(节点);
node=node.kitas;
}
//给你的名单排序
Collections.sort(数据,新的asmuoparator());
返回数据;
}
类AsmuoComparator实现Comparator
{
公共整数比较(Asmuo p1、Asmuo p2)
{
返回p1.pavarde.compareTignoreCase(p2.pavarde);
//我猜帕瓦德是姓?
}
}
现在,您可以根据需要使用返回的列表。要按顺序遍历列表并对每个项目执行操作,请执行以下操作:

List<Asmuo> data = sortList();
for (Asmuo a : data) {
    // write to file, etc...
}
List data=sortList();
用于(Asmuo a:数据){
//写入文件等。。。
}

祝你好运!如果我的任何假设是错误的,请告诉我,这样我就可以修改我的答案。

如果我做了一些错误的假设,你必须原谅我,因为我不会说立陶宛语??所以你的变量和方法名让我很难理解你的代码

您似乎有自己的“个人”记录的链接列表结构。有几种不同的方法可以根据姓氏对记录进行排序。一种方法是编写一种方法,通过手动移动节点并断开/重新创建节点之间的链接来对链接列表进行排序

另一种方法是将列表转储到标准列表中,并使用
Collections.sort()
和适当的
比较器
类对列表进行排序

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?
    }
}
Sarasas类{
...
私有列表分类列表(){
//将列表转储到ArrayList中
列表数据=新的ArrayList();
Irasas node=p;//从Sarasas对象的头节点开始
while(节点!=null){
数据添加(节点);
node=node.kitas;
}
//给你的名单排序
Collections.sort(数据,新的asmuoparator());
返回数据;
}
类AsmuoComparator实现Comparator
{
公共整数比较(Asmuo p1、Asmuo p2)
{
返回p1.pavarde.compareTignoreCase(p2.pavarde);
//我猜帕瓦德是姓?
}
}
现在,您可以根据需要使用返回的列表。要按顺序遍历列表并对每个项目执行操作,请执行以下操作:

List<Asmuo> data = sortList();
for (Asmuo a : data) {
    // write to file, etc...
}
List data=sortList();
用于(Asmuo a:数据){
//写入文件等。。。
}

祝你好运!如果我的任何假设是错误的,请告诉我,这样我就可以修改我的答案。

虽然我对这段代码没有具体的评论,但坦率地说,鉴于我对您使用的语言缺乏理解,我发现阅读起来非常困难,作为一种通用方法,这就是我解决您所问问题的方法:

  • 创建一个列表类型来保存名称/数据/等的列表,使用POJO类来保存数据。如果我不知道列表的长度,我经常使用LinkedList类型,如果我事先知道有多少元素,则使用ArrayList类型
  • 将文件1中的所有数据读取到此对象列表中
  • 创建一个实现Comparator的类,使用泛型指定POJO类
    在这个类中,您可以比较名称以检查顺序。您还可以使用java String方法compare或compareIgnoreCase让java为您进行名称比较
  • 将列表和此比较器实现传递给Arrays.sort
  • 写出已排序java对象的列表

  • 顺便说一句,这适用于任何java对象类型,排序方法可以是完全任意的,或者基于数据的某些新特性。我经常使用这种方法,因为java为您完成了大部分繁重的工作,它可以最大限度地减少您的时间和精力投入。当java成为lready有一个很好的代码供您使用。

    虽然我对这段代码没有具体的评论,因为坦率地说,由于我对您使用的语言缺乏理解,我发现阅读起来非常困难,作为一种通用方法,这就是我将如何解决您提出的问题:

  • 创建一个列表类型来保存名称/数据/等的列表,使用POJO类来保存数据。如果我不知道列表的长度,我经常使用LinkedList类型,如果我事先知道有多少元素,则使用ArrayList类型
  • 将文件1中的所有数据读取到此对象列表中
  • 创建一个实现Comparator的类,使用泛型指定POJO类
    在这个类中,您可以比较名称以检查顺序。您还可以使用java String方法compare或compareIgnoreCase让java为您进行名称比较
  • 将列表和此比较器实现传递给Arrays.sort
  • 写出已排序java对象的列表
  • 顺便说一句,这适用于任何java对象类型,排序方法可以是完全任意的,或者基于数据的一些新特性。我经常使用这种方法,因为java为您完成了大部分繁重的工作,它可以最大限度地减少您的时间和精力投入。没有意义的重复