Имя переменной не может быть преобразовано в переменную - я не могу найти проблему - PullRequest
1 голос
/ 16 июня 2019

В строке 110, где написано "return front3", я получаю эту ошибку.Я не уверен, почему, я создаю Node front3 внутри цикла while.

    public static Node add(Node poly1, Node poly2) {
        /** COMPLETE THIS METHOD **/
        // FOLLOWING LINE IS A PLACEHOLDER TO MAKE THIS METHOD COMPILE
        // CHANGE IT AS NEEDED FOR YOUR IMPLEMENTATION
        Node ptr1 = poly1;
        Node ptr2 = poly2;
        Node ptr3 = null;
        // Node front3;

        while (ptr1 != null && ptr2 != null) {
            if (ptr1.term.degree == ptr2.term.degree) {
                if (ptr3 == null) {
                    Node front3 = new Node(ptr1.term.coeff + ptr2.term.coeff,ptr1.term.degree,null);
                    ptr3 = front3;
                } else {
                    Node temp = new Node(ptr1.term.coeff + ptr2.term.coeff,ptr1.term.degree,null);
                    ptr3.next = temp;
                    ptr3 = temp;
                }
                ptr1 = ptr1.next;
                ptr2 = ptr2.next;
            } else if ( ptr1.term.degree > ptr2.term.degree) {
                if (ptr3 == null) {
                    Node front3 = new Node(ptr1.term.coeff,ptr1.term.degree,null);
                    ptr3 = front3;
                } else {
                    Node temp = new Node(ptr1.term.coeff, ptr1.term.degree , null);
                    ptr3.next = temp;
                    ptr3 = temp;
                }
                ptr1 = ptr1.next;
            } else if ( ptr1.term.degree < ptr2.term.degree ) {
                if (ptr3 == null) {
                    Node front3 = new Node(ptr2.term.coeff, ptr2.term.degree,null);
                    ptr3 = front3;
                } else {
                    Node temp = new Node(ptr2.term.coeff,ptr2.term.degree,null);
                    ptr3.next = temp;
                    ptr3 = temp;
                }
                ptr2 = ptr2.next;
            }
        }


        if (ptr3 == null) {
            return null;
        }

        return front3;
    }

Затем я создал другой Node, Node front4, инициализировал его чем-то, и моя программа запустилась.Это было сделано вне цикла while.

1 Ответ

1 голос
/ 16 июня 2019

Это происходит потому, что объекты существуют только внутри блока, в котором они объявлены. В вашем случае ваш front3 будет существовать только внутри блока if, который вы использовали для его объявления:

if (ptr3 == null) {
    Node front3 = new Node(ptr2.term.coeff, ptr2.term.degree,null);
    ptr3 = front3; // Can use it here
}
// Cannot use it here

Если вам действительно нужно вернуть объект front3, вы должны объявить его на «уровне метода», так же, как вы делаете для своих узлов ptr. На самом деле, вы уже прокомментировали это там. Если вы просто примените изменения, как указано ниже, вам будет хорошо:

Ток:

// Node front3;

После того, как:

Node front3 = null; // Needs to initialize

И ваши if операторы должны быть изменены, как показано в примере ниже:

Ток:

if (ptr3 == null) {
    Node front3 = new Node(ptr1.term.coeff,ptr1.term.degree,null);
    ptr3 = front3;
}
* * После того, как тысяча двадцать-одиной: * * тысяча двадцать-дв
if (ptr3 == null) {
    front3 = new Node(ptr1.term.coeff,ptr1.term.degree,null); // No need for "Node", as it was already declared
    ptr3 = front3;
}

Ps. Я не пересматривал логику. Это просто, чтобы объяснить, почему вы получаете «Имя переменной не может быть преобразовано в переменную» error.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...