Несоответствие типов конструкторов в java - PullRequest
0 голосов
/ 05 апреля 2020

Я самообучающийся связанный список в java, и я писал основную c программу. Я получаю ошибки, связанные с конструкторами, которые я не могу понять. Вот мой код:

import java.util.*;

public class prac{

public class Linked{

    public void display(Node head)
    {
        if(head==null) // list is empty
        {
            return ;
        }
        Node current=head;
        while(current!=null)
        {   System.out.print(current.data+ " --> ");
            current=current.next;
        }
        System.out.println(current);
    }
    private class Node{
        int data;
        Node next;
        public Node(int data)
        {
            this.data=data;
            this.next=null;
        }
    }
}
public static void main(String[] args)
{
    Node head=new Node(10);
    Node second=new Node(11);
    Node third=new Node(5);
    Node fourth=new Node(1);
    head.next=second;
    second.next=third;
    third.next=fourth;
    Linked linklist=new Linked();
    linklist.display(head);
}
}
Some of the errors are this:
error: constructor Node in class Node cannot be applied to given types;
    Node fourth=new Node(1);
                ^
  required: no arguments
  found: int
  reason: actual and formal argument lists differ in length
error: non-static variable this cannot be referenced from a static context
    Linked linklist=new Linked();
                    ^
prac.java:40: error: incompatible types: Node cannot be converted to prac.Linked.Node
    linklist.display(head);

Может кто-нибудь объяснить, как решить эту ошибку и причину ее возникновения? Я застрял здесь. /

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Вы не можете получить доступ к классу Node из более высокой области видимости, поскольку он равен private классу Linked. Только внутри связанного класса вы можете фактически создать объект Node из-за его ограничения доступа.

В моем решении я изначально разделил классы, поэтому Linked больше не находится внутри класса Prac. В противном случае все ваши методы должны были бы быть естественно static из-за Prac, имеющего основной метод

public static void main(String[] args).

Кроме того, я решил оставить Node конструктор приватный, но публично предоставляет метод addNode(int value), который вы можете вызвать.

Решение - здесь , чтобы помочь.

0 голосов
/ 05 апреля 2020

Если у вас есть внутренний класс, и у вас есть тип переменной, такой же, то он будет иметь приоритет

  Node current=head;

Это относится к закрытому внутреннему классу

В вашем основном методе

 Node head=new Node(10)

это относится к другому классу

Чтобы решить эту проблему, один вариант, изменить имя внутреннего класса, другой вариант создать конструктор и скопировать все значения в этот объект

private class Node{
    int data;
    Node next;
    public Node(mypackage.Node node) {
        this.data = node.data;
        this.next = node.next;
    }

    public Node(int data)
    {
        this.data=data;
        this.next=null;
    }
}

Затем измените отображаемую вами функцию на

Node current=new Node(head);

. В этом коде mypackage предполагается как ваш собственный пакет или сторонняя библиотека

...