gpt4 book ai didi

java - 在浏览器历史记录系统中乘以 for 循环

转载 作者:行者123 更新时间:2023-11-30 08:15:06 26 4
gpt4 key购买 nike

我想,我一直在为一个项目编写一个网络浏览器,我发现我无法使我的历史系统按预期工作,目前我发现我的历史项目正在复制,我的历史基于 for 循环样式金字塔在 session 之间复制自身,其中金字塔的大小是我上次访问的页面数的 n-1:

页面重复|上次 session 访问的页面

    1                        1
12 2
123 3
1234 4

每当我访问新页面时,就会调用此方法,并且上半部分的 if 语句仅在浏览器启动时运行一次,并且可以从存储的 CSV 文件中恢复上一个 session 的历史记录。

代码应该在每次访问页面时创建一个 jmenuitem,然后将其添加到 jmenu,这做得很好,但是,它还应该将链接添加到列表中。然后该列表将附加到 csv 中进行存储。

public class FileBar extends JMenuBar {
int tracker = 0;
File histPath = new File("history.csv");
JMenu history = new JMenu("History");
List<String> histStore = new ArrayList<String>();

public void createhistory(String webAddress) {
try {
List<String> histFeedback = new ArrayList<String>();
writer = new FileWriter(histPath, true);
if (tracker < 1) {
// system to retrieve information from csv file upon launch of program
}

JMenuItem button = new JMenuItem(webAddress);
history.add(button);
button.addActionListener(new ActionListener() {
// ...
});

histStore.add(webAddress);
int i = 0;
for (i = 0; i < histStore.size(); i++) {

writer.append(histStore.get(i));
writer.append(",");
}

writer.flush();
} catch (Exception e) {}
}
}

最佳答案

好的,这就是(我认为)问题所在。每次访问页面时,您似乎都将附加整个历史记录到 CSV 中的行。

我不知道 f.histStore 来自哪里,但我假设它是从 CSV 中的行创建的。因此,如果 CSV 中有 5 个地址,则看起来 f.histStore.size() == 5

因此,当您转到某个页面时,您可以将该地址附加到 f.histStore:

f.histStore.add(webAddress);

好的,到目前为止看起来不错。但是,您附加 f.histStore 到最初读取的行:

for (i = 0; i < f.histStore.size(); i++) {
writer.append(f.histStore.get(i));
writer.append(",");
}

因此,您已将整个列表附加到现有列表中。因此,这会导致重复的模式,如下所示,其中 abc 是地址:

a
aab
aabaabc

如果出现这种情况,有一个简单的解决方案:仅将最后一个地址写入文件。将写入循环替换为:

int lastIndex = f.histStore.size() - 1;
writer.append(f.histStore.get(lastIndex));
writer.append(",");

这样可以吗?如果不是,错误的输出是什么?

关于java - 在浏览器历史记录系统中乘以 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774560/

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