Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在自定义列表类Java中实现的ArrayList_Java_List_Inheritance_Arraylist_Implements - Fatal编程技术网

在自定义列表类Java中实现的ArrayList

在自定义列表类Java中实现的ArrayList,java,list,inheritance,arraylist,implements,Java,List,Inheritance,Arraylist,Implements,我正试图编写一个实现arraylist的类,但每当将元素添加到列表或从列表中删除时,我都会观察并重新绘制gui。从语法上来说,一切都是正确的,但我的代码中似乎有一个逻辑错误,因为我得到了一个StackOverflowerError,这使我相信在我缺少的某个地方有一个递归调用。确切的错误是 线程“main”java.lang.StackOverflower中出现异常 位于java.util.AbstractList。(未知源) 位于java.util.ArrayList。(未知源) 位于java.

我正试图编写一个实现arraylist的类,但每当将元素添加到列表或从列表中删除时,我都会观察并重新绘制gui。从语法上来说,一切都是正确的,但我的代码中似乎有一个逻辑错误,因为我得到了一个StackOverflowerError,这使我相信在我缺少的某个地方有一个递归调用。确切的错误是 线程“main”java.lang.StackOverflower中出现异常 位于java.util.AbstractList。(未知源) 位于java.util.ArrayList。(未知源) 位于java.util.ArrayList。(未知源) 在图书馆。(Library.java:45) 在LoanList(LoanList.java:14) 在图书馆。(Library.java:47) 在LoanList.(LoanList.java:14)

实际的代码大约是1k(1000)行,所以我将只发布我认为应该负责的位

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Library implements Serializable, LibraryInterface, ActionListener{
    private static final long serialVersionUID = 1L;
    private List<Student> students;
    private List<Book> books;
    private LoanList<Loan> loans;
    private JButton ok, cancel;
    private JTextField utxt,ntxt,etxt;
    private JTextArea list;
    private JFrame frame;
    public Library(){
        students = new ArrayList<Student>();
        books = new ArrayList<Book>();
        loans = new LoanList<Loan>();
    }
    /* (non-Javadoc)
     * @see LibraryInterface#loadBooks()
     */
    /* (non-Javadoc)
     * @see LibraryInterface#loadBooks()
     */
    @Override
    public void loadBooks() throws ClassNotFoundException, IOException{
        FileInputStream fis = new FileInputStream("Books.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        books = (ArrayList<Book>) ois.readObject();
        ois.close();
    }
    /* (non-Javadoc)
     * @see LibraryInterface#loadStudents()
     */
    /* (non-Javadoc)
     * @see LibraryInterface#loadStudents()
     */
    @Override
    public void loadStudents() throws ClassNotFoundException, IOException{
        FileInputStream fis = new FileInputStream("Students.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        students = (ArrayList<Student>) ois.readObject();
        ois.close();
    }
    /* (non-Javadoc)
     * @see LibraryInterface#loadLoans()
     */
    /* (non-Javadoc)
     * @see LibraryInterface#loadLoans()
     */

    @Override
    public void loadLoans() throws ClassNotFoundException, IOException{
        FileInputStream fis = new FileInputStream("Loans.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        loans = (LoanList<Loan>) ois.readObject();
        ois.close();
    }


import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class LoanList<Loan> extends Library implements List<Loan>{
     /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private ArrayList<Loan> list;

     public LoanList(){
         list = new ArrayList<Loan>();
     }//Rest of the arraylist methods follow, however it's not constructing so no need to post

import java.io.Serializable;

public class Loan implements Serializable{
    private String uid;
    private String bookId;
    private String date;

    public Loan(String uid,String bookid,String date){
        this.uid = uid;
        this.bookId = bookid;
        this.date = date;
    }
    public String getUid() {
        return uid;
    }
    public String getBookId() {
        return bookId;
    }
    public String getDate() {
        return date;
    }
    public String toString(){
        String x="";
        x = "BookID: " + this.bookId + "\n" + "Student UID: " + this.uid + "\n" + "Date Checkedout: " + this.date + "\n" + "\n";
        return x;
    }
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.GridLayout;
导入java.awt.Toolkit;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.io.Serializable;
导入java.text.DateFormat;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.Date;
导入java.util.Iterator;
导入java.util.List;
导入javax.swing.BoxLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollBar;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.JTextField;
导入javax.swing.event.ChangeEvent;
导入javax.swing.event.ChangeListener;
公共类库实现可序列化、库接口、ActionListener{
私有静态最终长serialVersionUID=1L;
私人名单学生;
私人书目;
私人贷款清单贷款;
私人按钮确定,取消;
私有JTextField utxt、ntxt、etxt;
私人区域清单;
私有JFrame;
公共图书馆(){
学生=新数组列表();
books=新数组列表();
贷款=新贷款列表();
}
/*(非Javadoc)
*@见图书馆界面#负荷书()
*/
/*(非Javadoc)
*@见图书馆界面#负荷书()
*/
@凌驾
public void loadBooks()抛出ClassNotFoundException,IOException{
FileInputStream fis=新的FileInputStream(“Books.txt”);
ObjectInputStream ois=新ObjectInputStream(fis);
books=(ArrayList)ois.readObject();
ois.close();
}
/*(非Javadoc)
*@see LibraryInterface#loadStudents()
*/
/*(非Javadoc)
*@see LibraryInterface#loadStudents()
*/
@凌驾
public void loadStudents()抛出ClassNotFoundException,IOException{
FileInputStream fis=新的FileInputStream(“Students.txt”);
ObjectInputStream ois=新ObjectInputStream(fis);
students=(ArrayList)ois.readObject();
ois.close();
}
/*(非Javadoc)
*@见图书馆界面#loadLoans()
*/
/*(非Javadoc)
*@见图书馆界面#loadLoans()
*/
@凌驾
public void loadLoans()抛出ClassNotFoundException,IOException{
FileInputStream fis=新的FileInputStream(“Loans.txt”);
ObjectInputStream ois=新ObjectInputStream(fis);
loans=(LoanList)ois.readObject();
ois.close();
}
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.Iterator;
导入java.util.List;
导入java.util.ListIterator;
公共类LoanList扩展了库实现列表{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
私有数组列表;
公共贷款清单(){
列表=新的ArrayList();
}//其余的arraylist方法如下,但它并没有构造,所以不需要发布
导入java.io.Serializable;
公共类贷款实现可序列化{
私有字符串uid;
私有字符串bookId;
私有字符串日期;
公共贷款(字符串uid、字符串bookid、字符串日期){
this.uid=uid;
this.bookId=bookId;
this.date=日期;
}
公共字符串getUid(){
返回uid;
}
公共字符串getBookId(){
返回bookId;
}
公共字符串getDate(){
返回日期;
}
公共字符串toString(){
字符串x=“”;
x=“BookID:“+this.BookID+”\n“+”学生UID:“+this.UID+”\n“+”日期检查输出:“+this.Date+”\n“+”\n”;
返回x;
}
编辑新的重新绘制方法

public void framePaint(){
    Collections.sort(students,new studentComparator());
    String result="";
    for(int i=0;i<students.size();i++){
        result += "\n" + students.get(i).toString() + "\n";
        for(int j=0;j<loans.size();j++){
            if(loans.get(j).getUid().equals(students.get(i).getUid())){
                result += "Book ID: " + loans.get(j).getBookId() + "\n";
            }
        }
    }
    list.setText(result);
    frame.repaint();
public void framePaint(){
Collections.sort(students,newstudentcomparator());
字符串结果=”;

对于(int i=0;i借阅列表是对库的扩展。库的构造函数生成一个新的借阅列表。这个新的借阅列表是一个库,所以它创建了一个新的借阅列表。这个新的借阅列表是一个库,所以它创建了一个新的借阅列表。无限。

换句话说,库有一个借阅列表。一个借阅列表st是一个库,所以它有一个借阅列表,这是一个库,它有一个借阅列表,这是一个库,它有一个借阅列表,这是一个库,它有一个借阅列表…借阅列表可能不需要是一个库。那么更正是什么呢?我需要扩展库,以便它能够访问一个重新绘制名为frame的JFrame的方法实现我自己的ArrayList是为了创建一个观察者,每当从列表中添加或删除对象时,我都会调用库中的repaint方法,该方法将使用更新的列表重新绘制我的框架。在我的framePaint方法中是frame.repaint(),您有两个选择。使LoanList不是库(删除“扩展库”),或者叫李
    public class studentComparator implements Comparator<Student>{
    @Override
    public int compare(Student arg0, Student arg1) {
        return arg0.getUid().compareTo(arg1.getUid());
    }
}
    public void listStudents(){
    frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel,1));
    list = new JTextArea("haha");
    list.setEditable(false);
    list.setBackground(Color.YELLOW);
    list.setForeground(Color.BLACK);
    Collections.sort(students,new studentComparator());
    String result="";
    for(int i=0;i<students.size();i++){
        result += "\n" + students.get(i).toString() + "\n";
        for(int j=0;j<loans.size();j++){
            if(loans.get(j).getUid().equals(students.get(i).getUid())){
                result += "Book ID: " + loans.get(j).getBookId() + "\n";
            }
        }
    }
    list.setText(result);
    panel.add(list);
    JScrollPane scroll = new JScrollPane(panel);
    frame.add(scroll);
    frame.setResizable(true);
    frame.setSize(300, 300);
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation(dim.width/2-frame.getSize().width/2, dim.height/2-frame.getSize().height/2);
    frame.setVisible(true);