使用新方法访问ArrayList时出现编译时错误

时间:2014-08-24 16:46:35

标签: java class object methods arraylist

我正在尝试访问在同一个类中使用不同方法创建的ArrayList。扫描程序方法从文本文件中提取数据。文本文件数据以这种方式显示:123 12 1 43,带换行符......

目前,我的方法可以提取数据,但在该方法结束后不会编译。我原来在同一个方法中使用了整个代码,并且工作正常。但我想通过在此类中创建一个新方法来返回最大值,然后创建一个将访问此新方法的tester类。这是我现有的代码。或者,如果有更好的解决方案。我全都耳朵。

public class DataAnalyzer {

public DataAnalyzer(File data) throws FileNotFoundException
{

        List<Integer> rawFileData = new ArrayList<>();
        FileReader file = new FileReader("info.txt");
        try (Scanner in = new Scanner(file)) {
            while(in.hasNext())
            {
                rawFileData.add(in.nextInt());
            }
        }
}

public int getLargest(rawFileData){
     int largest = rawFileData.get(0);
        for (int i = 1; i < rawFileData.size(); i++){
            if (rawFileData.get(i) > largest)
            {
                largest = rawFileData.get(i);
            }
        }

        for (Integer element : rawFileData){
            if (element == largest)
            {
                System.out.print("This is the Largest Value: ");
                System.out.print(element);
            }
        }

    }      
}

2 个答案:

答案 0 :(得分:4)

您的主要问题是您的方法声明。它需要一个类型参数:

public int getLargest(List<Integer> rawFileData)

请注意List<Integer>

现在,Collections实用程序类中已有一种方法。您最好详细查看该链接 - 那里有许多有用的方法。从具有自然顺序的Collection Object获得最高元素(例如Integer)。例如

int largest = Collections.max(rawFileData)

所以你的方法可以简化为:

public int getLargest(List<Integer> rawFileData)
    return Collections.max(rawFileData);
}

在开始编写代码之前,您需要更仔细地考虑逻辑,例如,您的第一个循环是好的:

    int largest = rawFileData.get(0);
    for (int i = 1; i < rawFileData.size(); i++){
        if (rawFileData.get(i) > largest)
        {
            largest = rawFileData.get(i);
        }
    }

你完全按照程序员的意思行事。但是,当你发现它时,不是回复largest,而是出于某种原因再次循环:

    for (Integer element : rawFileData){
        if (element == largest)
        {
            System.out.print("This is the Largest Value: ");
            System.out.print(element);
        }
    }

问问自己这是做什么的?你有一个List,比如苹果。你看看每一个并比较它们 - 找到最大的苹果。您现在拥有 List中最大的苹果。然后,您再次遍历List,寻找与您已找到的苹果相匹配的苹果。为什么这样?

此外,您从来没有return方法。您的方法被声明为返回int;但你永远不会这样做。

答案 1 :(得分:0)

方法定义中缺少的类型是此处的问题。

更改方法定义
public int getLargest(rawFileData) {
    ....
}

public void getLargest(List<Integer> rawFileData) {
    ....
}

方法中的第二个for循环是不必要的。最大的整数已经存储在变量&#34;最大的&#34;并且你可以在第一个for循环后打印它。