我有一个LinkedList类,由于某种原因无法访问我的Student类方法。我不明白为什么会发生这种情况,因为我的链表类型是Student类型。我一直收到错误找不到符号符号:方法getName()位置:类型为Student的变量数据,其中Student是一个类型变量:Student扩展在类节点中声明的Object。以下方法来自我的链表类
public double findGpa(String name){
Node<Student> temp = head;
double foundData = 0.0;
for(int i = 1 ; (i < size); i++){
if(temp.data.getName().equals(name)){
foundData = temp.data.getGpa();
}
temp = getNode(i);
}
return foundData;
}
getGpa是我的Student类中的一个方法,因为Node是student类型,数据也是student类型我不明白为什么它不能访问Student方法 我的学生班级列在下面
package lab3;
public class Student {
private String fullName;
private double gpa;
public Student(String name, double gpa){
fullName = name;
this.gpa = gpa;
}
public void setGpa(double grade){
gpa = grade;
}
public void setName(String name){
fullName = name;
}
public double getGpa(){
return gpa;
}
public String getName(){
return fullName;
}
}
这是整个LinkedList类,它将Node Class作为内部类
package lab3;
/**
*
* @author Chris
*/
/**
* SingleLinkedList is a class that provides some of the
* capabilities required by the List interface using
* a single linked list data structure.
* Only the following methods are provided:
* get, set, add, remove, size, toString
* @author Koffman and Wolfgang
* @param <Student>
*/
public class StudentSingleLinkedList<Student> {
private static class Node<Student> {
/** The data value. */
private Node<Student> next;
/** The link */
private Student data;
/**
* Construct a node with the given data value and link
* @param data - The data value
* @param next - The link
*/
public Node(Student d, Node<Student> next) {
this.next = next;
data = d;
}
/**
* Construct a node with the given data value
* @param data - The data value
*/
public Node(Student d) {
data = d;
next = null;
}
}
// Data fields
/** A reference to the head of the list */
private Node<Student> head = null;
/** The size of the list */
private int size = 0;
// Helper Methods
/** Insert an item as the first item of the list.
* @param item The item to be inserted
*/
private void addLast(Student item){
Node<Student> newNode = getNode(size);
newNode.next = new Node<Student>(item, newNode.next);
size++;
}
private void addFirst(Student item) {
head = new Node<Student>(item, head);
size++;
}
/**
* Add a node after a given node
* @param node The node which the new item is inserted after
* @param item The item to insert
*/
private void addAfter(Node<Student> node, Student item) {
node.next = new Node<Student>(item, node.next);
size++;
}
/**
* Remove the first node from the list
* @returns The removed node's data or null if the list is empty
*/
private Student removeFirst() {
Node<Student> temp = head;
if (head != null) {
head = head.next;
}
if (temp != null) {
size--;
return temp.data;
} else {
return null;
}
}
/*
public double findGpa(String name){
Node<Student
}
*/
private double findGpa(String name){
Node<Student> temp = head;
double foundData = 0.0;
for(int i = 1 ; (i < size); i++){
if(temp.data.getName().equals(name)){
foundData = temp.data.getGpa();
}
temp = getNode(i);
}
return foundData;
}
public Student updateGpa(String name){
Node<Student> temp = head;
if(temp.next.equals(name)){
temp.data =
}
}
/**
* Remove the node after a given node
* @param node The node before the one to be removed
* @returns The data from the removed node, or null
* if there is no node to remove
*/
private Student removeAfter(Node<Student> node) {
Node<Student> temp = node.next;
if (temp != null) {
node.next = temp.next;
size--;
return temp.data;
} else {
return null;
}
}
/**
* Find the node at a specified index
* @param index The index of the node sought
* @returns The node at index or null if it does not exist
*
*
*/
private Node<Student> getNode(int index){
Node<Student> temp = head;
if(temp == null){
return null;
}
else{
for(int i = 0; i < index - 1; i++){
temp = temp.next;
}
}
return temp;
}
// Public Methods
/**
* Get the data value at index
* @param index The index of the element to return
* @returns The data at index
* @throws IndexOutOfBoundsException if the index is out of range
*
*
* Uses getNode() to access the nodes index then calls the .data to get
* whatever data is being stored inside that node.
*/
public Student get(int index) {
Node<Student> temp = getNode(index);
if(temp== null){
throw new IndexOutOfBoundsException();
}
return temp.data;
}
/**
* Set the data value at index
* @param index The index of the item to change
* @param newValue The new value
* @returns The data value previously at index
* @throws IndexOutOfBoundsException if the index is out of
* range
*
*
* Uses the getNode method to get the index of the node and replace it with
* the data that temp holds
*/
public Student set(int index, Student newValue) {
if(head == null){
return null;
}
if(index > size){
throw new IndexOutOfBoundsException();
}
Node<Student> temp = getNode(index);
Student temp2 = temp.data;
temp.data = newValue;
return temp2;
}
/**
* Insert the specified item at the specified position in the list.
* Shifts the element currently at that position (if any) and any
* subsequent elements to the right (adds one to their indicies)
* @param index Index at which the specified item is to be inserted
* @param item The item to be inserted
* @throws IndexOutOfBoundsException if the index is out of range
*
*
*
* If index is less than 0 and greater than the size throw an exception
* If index is equal to 0 then item will be the first node
/**
* Insert the specified item at the specified position in the list.
* Shifts the element currently at that position (if any) and any
* subsequent elements to the right (adds one to their indicies)
* @param index Index at which the specified item is to be inserted
* @param item The item to be inserted
* @throws IndexOutOfBoundsException if the index is out of range
*
*
*
* If index is less than 0 and greater than the size throw an exception
* If index is equal to 0 then item will be the first node
*/
public void add(int index, Student item) {
if(index < 0 || index > size){
throw new IndexOutOfBoundsException();
}
if(index ==0){
addFirst(item);
}
Node<Student> temp = head;
for(int i= 0; i < index-1; i++){
temp = temp.next;
}
temp.next = new Node<Student>(item,temp.next);
size++;
}
/**
* Append the specified item to the end of the list
* @param item The item to be appended
* @returns true (as specified by the Collection interface)
*/
/**
* if head is null then temp which holds item will be the first node.
* While temp next node is not equal to null temp is equal to the next node
* When it is equal to null the while loop will stop and a new node is created
* and added to the end of the list
* @param item
* @return
*/
public boolean add(Student item) {
Student temp = item;
if(head == null){
addFirst(temp);
return true;
}
Node<Student> temp2 = head;
while(temp2.next != null){
temp2 = temp2.next;
}
temp2.next = new Node<Student>(temp);
size++;
return true;
}
int size() {
return size;
}
/**
* Obtain a string representation of the list
* @return A String representation of the list
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
Node p = head;
if (p != null) {
while (p.next != null) {
sb.append(p.data.toString());
sb.append(" ==> ");
p = p.next;
}
sb.append(p.data.toString());
}
sb.append("]");
return sb.toString();
}
/**
* Remove the first occurence of element item.
* @param item The item to be removed
* @return true if item is found and removed; otherwise, return false.
*/
public boolean remove(Student item) {
if (head == null) {
return false;
}
Node<Student> current = head;
if (item.equals(current.data)) {
removeFirst();
return true;
}
while (current.next != null) {
if (item.equals(current.next.data)) {
removeAfter(current);
return true;
}
current = current.next;
}
return false;
}
// Nested Class
/** A Node is the building block for the SingleLinkedList */
}
答案 0 :(得分:0)
private static class Node<Student> {
这相当于更传统的
private static class Node<T> {
它声明了一个通用的Node类,其类型参数为T,可以是任何类型。所以
private Student data;
实际上声明了泛型类型的字段,可以是任何字段。
你可能希望Node和LinkedList类根本不是通用的,因为它只应该包含学生,或者被声明为
private static class Node<T extends Student> {