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

标签 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);
            }
        }

    }      
}

最佳答案

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

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 ;但你永远不会这样做。

关于java - 使用新方法访问 ArrayList 时出现编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25473976/

相关文章:

java - 数组索引越界错误

java - 使用运行时定义的配置按需实例化 Bean

php - "public"和 "public static"之间的区别?

c# - 使用或不使用 new 在 C# 中创建对象

javascript - 将数组数组转换为组合在一起的对象数组

java - Java 支持运算符重载吗?

java - 客户端监听服务器消息

java - 在 pdf 上书写和显示希伯来字母

.net - 字符串数组需要声明吗?

html - CSS 更改按钮悬停颜色