gpt4 book ai didi

java - 返回了不正确的 Vector.size()

转载 作者:行者123 更新时间:2023-11-30 01:38:38 25 4
gpt4 key购买 nike

我正在实现一个图表,它将“Book”对象作为其节点。如果书籍共享一个关键字,则节点会连接。每本书的关键字都保存在 Book 类中的 Vector 中。为此,我创建了 3 个类。

1) 书籍 2) 顶点 3) 图

Vertex 类保存 Book 对象,并且还有一个包含所有其他 Vertex 对象(共享关键字的其他书籍)的 Vector。在驱动程序中,我创建了这本书,将其传递给一个图形,然后将其插入到一个顶点中,最后将顶点插入到一个名为“bookGraph”的 vector 中。

public final class Graph {

private Vector<Vertex> bookGraph = new Vector<Vertex>();
private int bookCounter = 0;

public Graph() {

}

public void addBook(Book bk) {
Vertex vtx = new Vertex(bk);

bookGraph.add(vtx);
bookCounter++;

System.out.println("Book #1 has " + bookGraph.get(0).getBook().getKeywords().size() + " keywords");

// addAdjVertices();

}

public void showKeywords() {

System.out.println("Book #1 is " + bookGraph.get(0).getBook().getKeywords().size() + " keywords");

}

书籍中的信息从驱动程序中的文件中读取并插入到书籍对象中。我试图确保这些信息被正确读取并正确插入到图表中。当尝试在 Graph 类的“showKeywords()”方法中获取关键字 Vector 的大小时,出现了我的问题。当 addBook() 方法中的完全相同的命令返回正确的大小时,bookGraph.get(0).getBook().getKeywords().size() 返回 0。我已经在 Book 类中实现了诸如 getTitle() 或 getAuthor() 之类的访问器方法,并且这些方法在 showKeywords() 方法中可以正常工作。关键字 vector 似乎是 showKeywords() 方法中的唯一问题。我在这里做错了什么?

这是我的驱动程序类......

  boolean fileopen = false;
String title, author, keys;
long isbn_number;
Vector<String> keywords = new Vector<String>();
String filename = "books.txt";
String[] keywordTokens;
Scanner fin = null;
Scanner input = new Scanner (System.in);
Graph books = new Graph();

try {
fin = new Scanner (new FileReader(filename));
String fline;

fileopen = true;

System.out.println("Reading books.txt...");

while (fin.hasNextLine()) {

fline = fin.nextLine();
title = fline;
fline = fin.nextLine();
author = fline;
fline = fin.nextLine();
isbn_number = Long.parseLong(fline);
fline = fin.nextLine();
keywordTokens = fline.split(",");

for (int x = 0; x < keywordTokens.length; x++) {
keywords.add(keywordTokens[x]);
}

Book tempBook = new Book(title,author,isbn_number,keywords);
books.addBook(tempBook);
keywords.clear();

if (fin.hasNextLine()) fline = fin.nextLine();


}

books.showKeywords();
System.out.println("Ready.");
}
catch (FileNotFoundException e) {
System.out.println("FILE NOT FOUND!");
}

最佳答案

在我看来它应该可以工作 - 没有任何明显的错误(比如不小心使用静态变量)。您能提供一个简短但完整的程序来演示该问题吗?该错误可能是在其他地方 - 您是否正在调用 setKeywords(new Vector<String>())例如,某个地方?

使用 Vector 的任何原因而不是更常见的ArrayList顺便一提?我还建议setKeywords(String key)可能应该被称为 addKeyword相反...

编辑:好的,现在您已经发布了代码,很明显:您只创建了 Vector 的单个实例。 。然后,您可以为每一行重用该实例,并在最后清除它。

只需在循环内声明关键字变量,在每次迭代时创建一个新实例,然后不要清除它。

为了使您的代码尽可能具有可读性(并避免此类事情),我建议您在首次使用时尽可能声明每个变量,并尽可能缩小范围。

关于java - 返回了不正确的 Vector.size(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com