与ArrayList交互的麻烦定义方法

时间:2019-01-24 09:14:03

标签: java arraylist methods casting

我正在做一个学校作业,我需要使用我编写的某些方法从ArrayList访问数据。

public static void main(String[] args) throws IOException {

    String fileName = "USPopulation.txt";
    File fileReader = new File(fileName);
    ArrayList<Integer> populations = new ArrayList<Integer>();
    Scanner inputFile = new Scanner(fileReader);

    while (inputFile.hasNext()) {
        populations.add(inputFile.nextInt());
    }

    System.out.println(populations.greatest());

    /**
 * Receives an ArrayList and returns the index of the value that has the
 * greatest increase from the previous value in the collection.
 * 
 * @param populations
 * @return greatestI
 */
    public static int greatest(ArrayList<Integer> populations) {

    int greatestDiff = 0;
    int greatestI = 0;
    int i = 0;
    while (i < populations.size() - 1) {
        int tempDiff = populations.get(i + 1) - populations.get(i);
        if (tempDiff >= greatestDiff) {
            greatestDiff = tempDiff;
            greatestI = i + 1;
        }
        i++;
    }
    return greatestI;
    }
}

当我尝试调用我的方法时,最棒的是,我遇到了错误

  

对于ArrayList类型,未定义greatest()方法。

我以为我需要的定义包含在方法的参数中,但显然没有。

错误消息以及我发现的故障排除方法使我似乎需要将ArrayList populations转换为一种类型的方法,该方法知道如何处理,但我尝试的任何方法似乎都无效。

感谢任何帮助。感谢任何花时间帮助菜鸟的人。 返回minimumI;

3 个答案:

答案 0 :(得分:0)

您应该这样称呼

greatest(populations);

您的调用方式就像调用一个在Arraylist类中定义的函数,而不是..您的函数只是将arraylist作为输入的方法

答案 1 :(得分:0)

您需要在这里了解两件事

  

populations是ArrayList类型的对象

     

greatest()是您在自己的类中编写的一种方法。它不属于ArrayList类

当您尝试访问populations.greatest()时,基本上是在尝试在类greatest()中运行方法ArrayList。因此,您应该得到一个异常“类型ArrayList的greatest()方法未定义”

相反,您需要在您自己的类的对象上或以静态方式调用方法greatest(arrayListObject)。由于您已经将方法定义为static,因此可以通过传递对象populations作为参数来直接调用它,如下所示。

System.out.println(greatest(populations));

答案 2 :(得分:0)

/ *通过传递参数种群(arrayList)来调用最大的函数,并且您也错过了主函数的右括号。
* /

公共静态void main(String [] args)引发IOException {

    String fileName = "USPopulation.txt";
    File fileReader = new File(fileName);
    ArrayList<Integer> populations = new ArrayList<Integer>();
    Scanner inputFile = new Scanner(fileReader);

    while (inputFile.hasNext()) {
        populations.add(inputFile.nextInt());
    }

    System.out.println(greatest(populations));
}

/**
 * Receives an ArrayList and returns the index of the value that has the
 * greatest increase from the previous value in the collection.
 * 
 * @param populations
 * @return greatestI
 */
public static int greatest(ArrayList<Integer> populations) {

    int greatestDiff = 0;
    int greatestI = 0;
    int i = 0;
    while (i < populations.size() - 1) {
        int tempDiff = populations.get(i + 1) - populations.get(i);
        if (tempDiff >= greatestDiff) {
            greatestDiff = tempDiff;
            greatestI = i + 1;
        }
        i++;
    }
    return greatestI;

}