Java 如何对带有对象和私有变量的链表进行排序

Java 如何对带有对象和私有变量的链表进行排序,java,sorting,linked-list,private,setter,Java,Sorting,Linked List,Private,Setter,在这里我要坦诚相待。这是家庭作业,但我已经绝望了,我正在寻找任何人来帮助我。我已经断断续续地做了一个多月了,并且多次去找我的导师。基本上,这个程序需要创建一个链表并对其排序,该链表在每个节点中都有int、string和double。它需要能够按每个数据类型进行排序,以及按输入顺序打印,但一旦我找到一个,我就可以将其传输到其他数据类型。请,一切都需要“手工制作”,请不要使用任何内置命令,因为我需要根据我的导师的要求创建一切 我试图创建链表,然后对其进行排序,但遇到了一个问题,所以我决定在创建链表时

在这里我要坦诚相待。这是家庭作业,但我已经绝望了,我正在寻找任何人来帮助我。我已经断断续续地做了一个多月了,并且多次去找我的导师。基本上,这个程序需要创建一个链表并对其排序,该链表在每个节点中都有int、string和double。它需要能够按每个数据类型进行排序,以及按输入顺序打印,但一旦我找到一个,我就可以将其传输到其他数据类型。请,一切都需要“手工制作”,请不要使用任何内置命令,因为我需要根据我的导师的要求创建一切

我试图创建链表,然后对其进行排序,但遇到了一个问题,所以我决定在创建链表时尝试对其进行排序

例如:输入第一个节点,然后在第一个节点的前面/后面输入下一个节点,然后将下一个节点放在它需要去的地方。。。等等

以下是我的代码(我只关注字符串):


复制的目的是什么?您正在尝试创建列表节点的副本吗?如果是,那么像
copy=fChr
copy=NextNode
这样的语句就不会执行。这些导致
copy
指向与
fChr
NextNode
相同的节点。然后,当您说
copy.next=fStr
时,它还将设置
fChr.next=fStr
NextNode.next=fStr
,这取决于
copy
分配给的是什么,因为
copy
是对同一节点的引用。如果您确实想用相同的字段进行复制,请尝试
copy=newlist1(),将创建一个新节点;我想你已经在设置字段了。@ajb好的,谢谢,你说得对,我正试图复制一个列表节点。唯一的问题是,我在对象中有“输入字符串、double和int”的问题。copy=new list1()将再次询问这些问题,对吗?我想复制NextNode而不创建对象的新实例(问题)。不管怎样,我是可以做到这一点,还是我必须完全重新编写程序?哎呀,我没看到。那真的不是放置这些输入语句的好地方。建议:在
list1
类中添加一个
static
方法,
public static list1 createListNodeFromInput()
,该方法创建一个新节点,然后向用户询问问题并设置字段。然后,程序的其余部分在希望从用户数据创建新节点时使用
node=list1.createListNodeFromInput()
,在仅希望创建新节点时使用
node=new list1()
,以准备制作另一个节点(例如)的副本。如果我有很多时间和你坐下来,我会建议对你的代码进行更多的重组。但这是一个相当简单的修复,您可以在不破坏整个程序的情况下进行。希望能有帮助。谢谢,我会尽力去做,看看能不能让它发挥作用。问题是我的老师讨厌静态变量,我不确定这是否是同一件事。如果是这样的话,我可能不得不尝试另一种方式,或者只是希望他不要太在意。我的老师很守旧,说在大学里他们不会在乎,但他希望我们理解一切,没有捷径,我想这是值得尊敬的。
    String repeat = "y";
    list1 fChr = null;
    list1 p = fChr;
    list1 copy = null;
    //list1 dCopy = null;
    //list1 iCopy = null;
    list1 fd = fChr;//front of the double list
    list1 fi = fChr;//front of the integer list
    list1 fStr = fChr;//front of the string list~
    list1 pStr = fStr;
    boolean inserted = false;
    int iii = 0;
    String sss = "";
    double ddd = 0.0;
    while(repeat.equals("y"))//while the user agrees to adding a new node
    {            
        if(fChr == null)// if the front is empty
        {
            fChr = new list1();//create a new node by calling object and sets it as the front
            p = fChr;
            copy = fChr;
            sss = fChr.GetS();
            iii = fChr.GetI();
            ddd = fChr.GetD();
            copy.SetS(sss);
            copy.SetI(iii);
            copy.SetD(ddd);
            System.out.println("(1)");
        }
        else
        {
            System.out.println("(2)");
            if(p!=null)
            {
                System.out.println("p = "+ p.GetS());
                if(p.next != null)
                {
                    System.out.println("p.next = "+ p.next.GetS());
                    System.out.println("p.next.next = "+ p.next.next.GetS());
                }
            }

            p = fChr;
            while(p.next != null)//finds the end of the Linked list
            {
                System.out.println("(3)");
                p = p.next;//moves the pointer p down the list
            }
            list1 NextNode = new list1();//
            p.next = NextNode;
            sss = NextNode.GetS();
            iii = NextNode.GetI();
            ddd = NextNode.GetD();
            copy = NextNode;
            String gg = "hi";//tests to see if the setter is actually   changing the value inside copy(it is not, it prints b) 
            copy.SetS(gg);
            copy.SetI(iii);
            copy.SetD(ddd);
            System.out.println(copy.GetS());
            System.out.println("p = "+ p.GetS());

        }

        pStr = fStr;
        //System.out.println(copy.GetS()+"*");
        inserted = false;
        if(fStr == null)
        {
            System.out.println("(4)");
            fStr = copy;//fStr = fChr;
            inserted = true;
            //System.out.println("p.next.next = "+ p.next.next.GetS());
        }
        else if(copy.GetS().compareTo(fStr.GetS()) < 0)
        {
            System.out.println("(5)");
            //System.out.println("1)p.next.next = "+ p.next.next.GetS());
            copy.next = fStr;//ERROR ON THIS LINE
            System.out.println("2)p.next.next = "+ p.next.next.GetS());
            System.out.println("fChr.next: "+fChr.next.GetS());
            fStr = copy;
            System.out.println("3)p.next.next = "+ p.next.next.GetS());
            inserted = true;
            System.out.println("p = "+ p.GetS());
            System.out.println("p.next = "+ p.next.GetS());
            System.out.println("4)p.next.next = "+ p.next.next.GetS());
        }
        else if(fStr.next == null && fStr != null)
        {
            System.out.println("(6)");
            fStr.next = copy;
            inserted = true;
        }
        else
        {
            System.out.println("(7)");
            pStr = fStr;
            System.out.println("RIP (8)");
            while(pStr.next != null && inserted == false)
            {
                System.out.println("(9)");
                System.out.println("RIP");
                if(copy.GetS().compareTo(pStr.next.GetS()) < 0)//if it goes between 2 nodes
                {
                    System.out.println("(10)");
                    copy.next = pStr.next;
                    pStr.next = copy;
                    inserted = true;
                }
                else 
                {
                    System.out.println("(11)");
                    pStr = pStr.next;
                }
                if(pStr.next == null && inserted == false)// it goes at the end(not necessary bc of the (in order) part)
                {
                    System.out.println("(12)");
                    pStr.next = copy;
                } 

            }
        }
        repeat = JOptionPane.showInputDialog("Would you like to add a node [y/n]");
        System.out.println("End of Loop");
    }
    System.out.println(fStr.GetS());
    PrintMenu(fChr, fi, fd, fStr);// sends the user to the menu screen
}
    import javax.swing.JOptionPane;
    public class list1
    {
    private int i;
    private String s;
    private double d;
    private String ss = null;
    private int ii = 0;
    private double dd = 0.0;
    list1 next = null; 
        public list1()
        {
        String str;
        s=JOptionPane.showInputDialog("Enter a String");
        String temp =JOptionPane.showInputDialog("Enter an Integer");
        i = Integer.parseInt(temp);
        String temp2 =JOptionPane.showInputDialog("Enter a Double");
        d = Double.parseDouble(temp2);

        }

        public double GetD()
        {  
            return d;
        }

        public String GetS()
        {   
            return s;
        }

        public int GetI()
        {
            return i;
        }

        public void SetS(String x)
        {
            ss = x;
        }

        public void SetI(int y)
        {
            ii = y;
        }

        public void SetD(double z)
        {
            dd = z;
        }
    }