1

在编程方面,我完全是新手,而且我是第一次用 Java 编写。是为了大学作业。我正在使用 NetBeans。

你看我完全迷失了,不知道我能做些什么来解决我的问题。这是我面临的问题:

1: for (String edge : edges.elementSet())- 它说它找不到符号'elementSet'。我该怎么做才能解决这个问题?

2: myConnections.addAll(y.getListOfLinks(tagsOfTheCurrentPictureAsAnArray));- 在这里,它说它找不到符号'tagsOfTheCurrentPictureAsAnArray',但我之前提到过:

String[] tagsOfTheCurrentPictureAsAnArray = tagsOfTheCurrentPicture.split(",");
for (String x : tagsOfTheCurrentPictureAsAnArray) {

我在这里做错了什么?完整脚本:

public static void main(String[] args) throws FileNotFoundException, IOException {
    String myFile = "C:\\Users\\Nils\\Desktop\\Uni\\Let's go Digital\\Digital data in practise\\Lecture4\\Datasets\\WWII.csv";
    FileWriter myFileWriter = new FileWriter("C:\\nodes.txt");
    BufferedWriter myBufferedNodesWriter = new BufferedWriter(myFileWriter);
    FileWriter myEdgesWriter = new FileWriter("C:\\edges.txt");
    BufferedWriter myBufferedEdgesWriter = new BufferedWriter(myFileWriter);
    FileReader myFileReader = new FileReader(myFile);
    BufferedReader myBufferedReader = new BufferedReader(myFileReader);
    String Comma = ",";
    char Commaderps = Comma.charAt(0);
    CsvReader excellentCsvReader;
    excellentCsvReader = new CsvReader(myBufferedReader, Commaderps);
    String textDelimiter = "\"";
    char Backslash = textDelimiter.charAt(0);
    excellentCsvReader.setTextQualifier(Backslash);
    excellentCsvReader.setUseTextQualifier(true);
    excellentCsvReader.readRecord();
    HashMultiset<String> myTags = HashMultiset.create();
    HashMultiset<String> myConnections = HashMultiset.create();
    while (excellentCsvReader.readRecord()) {
        String[] values = excellentCsvReader.getValues();
        String tagsOfTheCurrentPicture = values[2];
        String[] tagsOfTheCurrentPictureAsAnArray = tagsOfTheCurrentPicture.split(",");
        for (String x : tagsOfTheCurrentPictureAsAnArray) {
            myTags.add(x);
        }
        myBufferedNodesWriter.write("Id,Label,Number");
        myBufferedNodesWriter.newLine();
        for (String tag : myTags) {
            myBufferedNodesWriter.write(tag);
            myBufferedNodesWriter.write(",");
            myBufferedNodesWriter.write(tag);
            myBufferedNodesWriter.write(",");
            myBufferedNodesWriter.write(myTags.count(tag));
            myBufferedNodesWriter.newLine();
        }
        myBufferedNodesWriter.close();
        myBufferedEdgesWriter.write("Id,Source,Target,Type,Weight");
        myBufferedEdgesWriter.newLine();
        Integer idEdge = 0;
        for (String edge : edges.elementSet()) {
            idEdge = idEdge + 1;
            myBufferedEdgesWriter.write(idEdge);
            myBufferedEdgesWriter.write(",");
            myBufferedEdgesWriter.write(edge);
            myBufferedEdgesWriter.write(",");
            myBufferedEdgesWriter.write("Undirected");
            myBufferedEdgesWriter.write(",");
            myBufferedEdgesWriter.write(String.valueOf(edges.count(edge)));
            myBufferedEdgesWriter.newLine();
        }
        myBufferedEdgesWriter.close();
    }
    Utils y = new Utils();
    myConnections.addAll(y.getListOfLinks(tagsOfTheCurrentPictureAsAnArray));
    System.out.println("Tag:" + tagsOfTheCurrentPictureAsAnArray[3]);

}

}

4

3 回答 3

1

我想我知道你的tagsOfTheCurrentPictureAsAnArray问题在哪里

while (excellentCsvReader.readRecord()) {
    ...
    String[] tagsOfTheCurrentPictureAsAnArray = tagsOfTheCurrentPicture.split(",");
    for (String x : tagsOfTheCurrentPictureAsAnArray) {
        myTags.add(x);
    }
    ...
}
Utils y = new Utils();
myConnections.addAll(y.getListOfLinks(tagsOfTheCurrentPictureAsAnArray));

上次使用它时,它将超出范围,因为它在您的while循环之外。如果您希望它在您的 while 循环之后持续存在,您必须在您的 while 循环之外声明它。

所以你想要

String[] tagsOfTheCurrentPictureAsAnArray = tagsOfTheCurrentPicture.split(",");
while (excellentCsvReader.readRecord()) {
    ...

如果您希望每次迭代都使用相同的数组,或者

String[] tagsOfTheCurrentPictureAsAnArray;
while (excellentCsvReader.readRecord()) {
    ...
    tagsOfTheCurrentPictureAsAnArray = tagsOfTheCurrentPicture.split(",");

如果你想在每次迭代时重新初始化它

于 2013-10-01T21:54:18.140 回答
0

请发布整个代码。一些猜测:

1) 的类edges没有名为 的方法elementSet。方法名称拼写是否正确?是edges正确的类型吗?

2) 被tagsOfTheCurrentPictureAsAnArray宣布?如果是,是否声明在使用范围内?

于 2013-10-01T21:46:07.783 回答
0

由于您的第二个问题已得到回答,我将针对第一个问题。问题很简单,没有名为“edges”的 String[] 类型的变量。

for(String edge : edges.elementSet())

是“对于名为边缘的容器中的每个字符串类型的元素,做一些事情”。所以编译器寻找名为edges的容器,但找不到它(因为它不存在)。

例如,在之前的某些行中,您对 myTags 进行了循环。这不会引发任何错误,因为您确实有该变量的声明:

HashMultiset<String> myTags = HashMultiset.create();

所以你所要做的就是为“edges”集提供另一个这样的声明。

此外,考虑使用函数使您的代码更易于理解。

于 2016-04-10T18:06:36.607 回答