Как определить "узел" вне linkedbag & lt;generics>
Привет,
Я пытаюсь создать класс "узел" вне LinkedBag, используя пакет из внутреннего класса LinkedBag1.java (я приложил код, как показано ниже).
Но это не сработало.
Я мог бы скомпилировать Node.java, но не LinkedBagDemo1.java и LinkedBag1.java.
Возникла ошибка, как показано ниже.
Как я мог бы исправить эту проблему, чтобы сделать класс "Node" вне LinkedBag с помощью пакета.
Хотя я кое-что погуглил, это мне не очень помогло.
Я надеюсь, что вы, ребята, посоветуете мне несколько хороших способов. Спасибо!
Что я уже пробовал:
------------------ Node.java ------------------- package BagPackage; class Node<T> { private T data; // Entry in bag private Node<T> next; // Link to next node Node(T dataPortion) // The constructor's name is Node, not Node<T> { this(dataPortion, null); } // end constructor Node(T dataPortion, Node<T> nextNode) { data = dataPortion; next = nextNode; } // end constructor T getData() { return data; } // end getData void setData(T newData) { data = newData; } // end setData Node<T> getNextNode() { return next; } // end getNextNode void setNextNode(Node<T> nextNode) { next = nextNode; } // end setNextNode } // end Node ------------------ LinkedBagDemo1.java ------------------- package BagPackage; import java.util.*; public class LinkedBagDemo1 { public static void main(String[] args) { System.out.println("Creating an empty bag."); LinkedBag1<String> aBag = new LinkedBag1<>(); //change BagInterface to LinkedBag1 Why? testIsEmpty(aBag, true); displayBag(aBag); String[] contentsOfBag = {"A", "D", "B", "A", "C", "A", "D"}; testAdd(aBag, contentsOfBag); testIsEmpty(aBag, false); System.out.println("Minimum value in contentsOfBag is " + aBag.getMin()); } // end main // Tests the method isEmpty. // Precondition: If the bag is empty, the parameter empty should be true; // otherwise, it should be false. private static void testIsEmpty(LinkedBag1<String> bag, boolean empty) //change BagInterface to LinkedBag1 { System.out.print("\nTesting isEmpty with "); if (empty) System.out.println("an empty bag:"); else System.out.println("a bag that is not empty:"); System.out.print("isEmpty finds the bag "); if (empty && bag.isEmpty()) System.out.println("empty: OK."); else if (empty) System.out.println("not empty, but it is: ERROR."); else if (!empty && bag.isEmpty()) System.out.println("empty, but it is not empty: ERROR."); else System.out.println("not empty: OK."); } // end testIsEmpty // Tests the method add. private static void testAdd(LinkedBag1<String> aBag, String[] content) //change BagInterface to LinkedBag1 { System.out.print("Adding the following " + content.length + " strings to the bag: "); for (int index = 0; index < content.length; index++) { if (aBag.add(content[index])) System.out.print(content[index] + " "); else System.out.print("\nUnable to add " + content[index] + " to the bag."); } // end for System.out.println(); displayBag(aBag); } // end testAdd // Tests the method toArray while displaying the bag. private static void displayBag(LinkedBag1<String> aBag) //change BagInterface to LinkedBag1 { System.out.println("The bag contains the following string(s):"); Object[] bagArray = aBag.toArray(); for (int index = 0; index < bagArray.length; index++) { System.out.print(bagArray[index] + " "); } // end for System.out.println(); } // end displayBag } // end LinkedBagDemo1 ------------------ LinkedBag1.java ------------------- package BagPackage; public final class LinkedBag1<T extends Comparable> implements BagInterface<T> { private Node<T> firstNode; // Reference to first node private int numberOfEntries; public LinkedBag1() { firstNode = null; numberOfEntries = 0; } // end default constructor /** Adds a new entry to this bag. @param newEntry The object to be added as a new entry. @return True. */ public boolean add(T newEntry) // OutOfMemoryError possible { // Add to beginning of chain: Node<T> newNode = new Node<T>(newEntry); newNode.next = firstNode; // Make new node reference rest of chain // (firstNode is null if chain is empty) firstNode = newNode; // New node is at beginning of chain numberOfEntries++; return true; } // end add /** Retrieves all entries that are in this bag. @return A newly allocated array of all the entries in this bag. */ public T[] toArray() { // The cast is safe because the new array contains null entries. @SuppressWarnings("unchecked") T[] result = (T[])new Comparable[numberOfEntries]; // Unchecked cast int index = 0; Node currentNode = firstNode; while ((index < numberOfEntries) && (currentNode != null)) { result[index] = currentNode.data; index++; currentNode = currentNode.next; } // end while return result; // Note: The body of this method could consist of one return statement, // if you call Arrays.copyOf } // end toArray /** Sees whether this bag is empty. @return True if the bag is empty, or false if not. */ public boolean isEmpty() { return numberOfEntries == 0; } // end isEmpty /** Gets the number of entries currently in this bag. @return The integer number of entries currently in the bag. */ public int getCurrentSize() { return numberOfEntries; } // end getCurrentSize /** Removes one unspecified entry from this bag, if possible. @return Either the removed entry, if the removal was successful, or null. */ public T remove() { T result = null; if (firstNode != null) { result = firstNode.data; firstNode = firstNode.next; // Remove first node from chain numberOfEntries--; } // end if return result; } // end remove // Locates a given entry within this bag. // Returns a reference to the node containing the entry, if located, // or null otherwise. private Node getReferenceTo(T anEntry) { boolean found = false; Node currentNode = firstNode; while (!found && (currentNode != null)) { if (anEntry.equals(currentNode.data)) found = true; else currentNode = currentNode.next; } // end while return currentNode; } // end getReferenceTo /** Removes one occurrence of a given entry from this bag, if possible. @param anEntry The entry to be removed. @return True if the removal was successful, or false otherwise. */ public boolean remove(T anEntry) { boolean result = false; Node nodeN = getReferenceTo(anEntry); if (nodeN != null) { nodeN.data = firstNode.data; // Replace located entry with entry in first node firstNode = firstNode.next; // Remove first node numberOfEntries--; result = true; } // end if return result; } // end remove /** Removes all entries from this bag. */ public void clear() { while (!isEmpty()) remove(); } // end clear /** Counts the number of times a given entry appears in this bag. @param anEntry The entry to be counted. @return The number of times anEntry appears in the bag. */ public int getFrequencyOf(T anEntry) { int frequency = 0; int loopCounter = 0; Node currentNode = firstNode; while ((loopCounter < numberOfEntries) && (currentNode != null)) { if (anEntry.equals(currentNode.data)) { frequency++; } // end if loopCounter++; currentNode = currentNode.next; } // end while return frequency; } // end getFrequencyOf /** Tests whether this bag contains a given entry. @param anEntry The entry to locate. @return True if the bag contains anEntry, or false otherwise. */ public boolean contains(T anEntry) { boolean found = false; Node currentNode = firstNode; while (!found && (currentNode != null)) { if (anEntry.equals(currentNode.data)) found = true; else currentNode = currentNode.next; } // end while return found; } // end contains /* • The method removeMin that removes and returns the smallest object in a bag • The method removeMax that removes and returns the largest object in a bag */ // • The method getMin that returns the smallest object in a bag @SuppressWarnings("unchecked") public T getMin() { Node currentNode = firstNode; T currentMin = firstNode.data; while (currentNode != null) { currentNode = currentNode.next; if (currentNode != null && currentNode.data.compareTo(currentMin) == -1) // if val 1 > val 2 currentMin = currentNode.data; } // end while return currentMin; } // end getMin // • The method getMax that returns the largest object in a bag @SuppressWarnings("unchecked") public T getMax() { Node currentNode = firstNode; T currentMax = firstNode.data; while (currentNode != null) { currentNode = currentNode.next; if (currentNode != null && currentNode.data.compareTo(currentMax) == 1) // if val 1 > val 2 currentMax = currentNode.data; } // end while return currentMax; } // end getMax } // end LinkedBag1 ------------------ BagInterface.java ------------------- //package BagPackage; public interface BagInterface<T> { /** Gets the current number of entries in this bag. @return The integer number of entries currently in the bag. */ public int getCurrentSize(); /** Sees whether this bag is empty. @return True if the bag is empty, or false if not. */ public boolean isEmpty(); /** Adds a new entry to this bag. @param newEntry The object to be added as a new entry. @return True if the addition is successful, or false if not. */ public boolean add(T newEntry); /** Removes one unspecified entry from this bag, if possible. @return Either the removed entry, if the removal. was successful, or null. */ public T remove(); /** Removes one occurrence of a given entry from this bag. @param anEntry The entry to be removed. @return True if the removal was successful, or false if not. */ public boolean remove(T anEntry); /** Removes all entries from this bag. */ public void clear(); /** Counts the number of times a given entry appears in this bag. @param anEntry The entry to be counted. @return The number of times anEntry appears in the bag. */ public int getFrequencyOf(T anEntry); /** Tests whether this bag contains a given entry. @param anEntry The entry to locate. @return True if the bag contains anEntry, or false if not. */ public boolean contains(T anEntry); /** Retrieves all entries that are in this bag. @return A newly allocated array of all the entries in the bag. Note: If the bag is empty, the returned array is empty. */ public T[] toArray(); } // end BagInterface
& lt;ошибка на LinkedBagDemo1. java>
LinkedBagDemo1. java:40: ошибка: не удается найти символ
private static void testIsEmpty(LinkedBag1< string> bag, boolean empty) / / изменить BagInterface на LinkedBag1
^
символ: класс LinkedBag1
расположение: класс LinkedBagDemo1
LinkedBagDemo1. java:60: ошибка: не удается найти символ
private static void testAdd(LinkedBag1< string> aBag, String[] content) / / изменить BagInterface на LinkedBag1
^
символ: класс LinkedBag1
расположение: класс LinkedBagDemo1
LinkedBagDemo1. java:78: ошибка: не удается найти символ
private static void displayBag(LinkedBag1< string> aBag) / / изменить BagInterface на LinkedBag1
^
символ: класс LinkedBag1
расположение: класс LinkedBagDemo1
LinkedBagDemo1. java:25: ошибка: не удается найти символ
LinkedBag1 в<строка> У абаг = новый LinkedBag1 на< и GT;(); //BagInterface изменение LinkedBag1 почему?
^
символ: класс LinkedBag1
расположение: класс LinkedBagDemo1
LinkedBagDemo1. java:25: ошибка: не удается найти символ
LinkedBag1 в<строка> У абаг = новый LinkedBag1 на< и GT;(); //BagInterface изменение LinkedBag1 почему?
^
символ: класс LinkedBag1
расположение: класс LinkedBagDemo1
5 ошибок
& lt;ошибка на LinkedBag1. java>
LinkedBag1. java:9: ошибка: не удается найти символ
общественные окончательной LinkedBag1 класс&ЛТ;Т расширяет сопоставимых> инвентарь BagInterface&ЛТ;п&ГТ;
^
символ: класс BagInterface
LinkedBag1. java:11: ошибка: не удается найти символ
private Node< t & gt; firstNode; / / ссылка на первый узел
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:91: ошибка: не удается найти символ
частная getReferenceTo узел(Т запись)
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:26: ошибка: не удается найти символ
Node< t & gt; newNode = новый узел< t> (newEntry);
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:26: ошибка: не удается найти символ
Node< t & gt; newNode = новый узел< t> (newEntry);
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:44: ошибка: не удается найти символ
Узел currentNode = firstNode;
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:94: ошибка: не удается найти символ
Узел currentNode = firstNode;
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:114: ошибка: не удается найти символ
Noden, где узел = getReferenceTo(запись);
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:142: ошибка: не удается найти символ
Узел currentNode = firstNode;
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:165: ошибка: не удается найти символ
Узел currentNode = firstNode;
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:187: ошибка: не удается найти символ
Узел currentNode = firstNode;
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
LinkedBag1. java:205: ошибка: не удается найти символ
Узел currentNode = firstNode;
^
символ: узел класса
местоположение: класс LinkedBag1< t>
где T-переменная типа:
T расширяет сопоставимое объявленное в классе LinkedBag1
Richard MacCutchan
Вам нужно импортировать LinkedBag1 в другие модули. В будущем, пожалуйста, не сбрасывайте так много кода, просто покажите часть, имеющую отношение к проблеме.
Member 13425520
Спасибо за совет. Я не буду сбрасывать так много кода в будущем.
После того, как я импортировал
package bagPackage;чтобы LinkedBag1.java использование кода
import bagPackage.*;
Возникла ошибка.
LinkedBag1.java: error: Node is not public in bagPackage; cannot be accessed from outside package
Знаете ли вы, есть ли способ получить доступ к частному классу из внешнего пакета?
Richard MacCutchan
Нет, конечно, нет, вот почему вы объявляете это частным делом. Идти к Учебные Пособия По Java™ [^] и изучать правила языка.
Member 13425520
Спасибо. Я просмотрел некоторые материалы об этом в Интернете. И тут я понял.