Java 类型对象问题的方法未定义

Java 类型对象问题的方法未定义,java,Java,我得到以下错误:类型对象的getOdometer和getGallons方法未定义。这是我的密码。我的问题在main方法中,在while循环中,我正在使用我的访问器方法。为什么这不起作用?我该如何修复它?我是编程新手,所以不要给我太复杂的答案。谢谢你的回答 我正在做的程序读取一个文件并获取里程表和汽车在里程表处加满的加仑数。在我从FillUpArray助手方法返回FillUp对象的arraylist之后,我被告知使用助手方法从文件中获取这些数字,并在main方法中计算里程数 package lab

我得到以下错误:类型对象的getOdometer和getGallons方法未定义。这是我的密码。我的问题在main方法中,在while循环中,我正在使用我的访问器方法。为什么这不起作用?我该如何修复它?我是编程新手,所以不要给我太复杂的答案。谢谢你的回答

我正在做的程序读取一个文件并获取里程表和汽车在里程表处加满的加仑数。在我从FillUpArray助手方法返回FillUp对象的arraylist之后,我被告知使用助手方法从文件中获取这些数字,并在main方法中计算里程数

package lab8;
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.util.ArrayList;


public class CheckpointOne {
public static void main(String[] args) throws FileNotFoundException
{
    File file = new File("C:/Users/Nick/workspace/project8/mileage.txt");
    Scanner scan = new Scanner(file);
    double mileage=0.0;
    int i=0;
    while(i+1<fillUpArray(scan).size())
    {
        mileage=(fillUpArray(scan).get(i+1).getOdometer()-fillUpArray(scan).get(i).getOdometer())/fillUpArray(scan).get(i+1).getGallons();
        System.out.println("Mileage: "+mileage);
        i++;
    }
}
    private static ArrayList fillUpArray(Scanner scan)
    {
        ArrayList<FillUp> list = new ArrayList<FillUp>();
        int odometer=0;
        double gallons=0.0;
        while(scan.hasNextLine())
        {
            String line = scan.nextLine();
            Scanner scans = new Scanner(line);
            while(scans.hasNext())
            {
                odometer=scans.nextInt();
                gallons=scans.nextDouble();
            }
            FillUp fill = new FillUp(odometer, gallons);
            list.add(fill);
        }
        return list;
    }


}

您需要从
fillUpArray()
返回
ArrayList

private static ArrayList fillUpArray(扫描程序扫描)
^^^^^^^^这个

如果不这样做,您将有效地返回
对象的数组列表

您需要从
fillUpArray()返回
ArrayList

private static ArrayList fillUpArray(扫描程序扫描)
^^^^^^^^这个

如果没有这一点,您将有效地返回
对象的数组列表

fillUpArray
方法中,您创建并返回了
ArrayList
,但该方法上的返回类型是原始类型
ArrayList
。因为它是raw,type erasure表示raw
ArrayList
上的
get
的返回类型将是
Object
,这当然没有这两种方法
getOdometer()
getGallons()

改变

private static ArrayList fillUpArray(Scanner scan)

private static ArrayList fillUpArray(扫描程序扫描)

fillUpArray
方法中,您创建并返回了一个
ArrayList
,但该方法上的返回类型是原始类型
ArrayList
。因为它是raw,type erasure表示raw
ArrayList
上的
get
的返回类型将是
Object
,这当然没有这两种方法
getOdometer()
getGallons()

改变

private static ArrayList fillUpArray(Scanner scan)

private static ArrayList fillUpArray(扫描程序扫描)
上面的行尝试使用一个实例
对象
类调用
getOdometer()和getGallons()

在调用该方法之前,必须向下转换到
FillUp
对象

修改后的代码为:

mileage=((FillUp)fillUpArray(scan).get(i+1).getOdometer()-(FillUp)fillUpArray(scan).get(i).getOdometer())/(FillUp)fillUpArray(scan).get(i+1).getGallons();
注意:更好的做法是根据需要返回相同的
对象列表

上面的行尝试使用一个实例
对象
类调用
getOdometer()和getGallons()

在调用该方法之前,必须向下转换到
FillUp
对象

修改后的代码为:

mileage=((FillUp)fillUpArray(scan).get(i+1).getOdometer()-(FillUp)fillUpArray(scan).get(i).getOdometer())/(FillUp)fillUpArray(scan).get(i+1).getGallons();

注意:更好的做法是根据需要返回相同的
对象列表。

问题在于静态方法返回的值中使用了raw type
专用静态数组列表填充数组(扫描程序扫描)
。原始类型允许在生成集合时指定集合,而无需定义泛型类型。您可以查看原始类型。它允许维护与最旧的JVM(版本<5.0)的兼容性

所以,若您使用原始类型,则会强制集合使用正在强制转换到对象的项。在本例中,您定义
fillUpArray(Scanner scan)
返回
ArrayList
元素,我已经提到它是一个原始类型。因此,您可以像ArrayList一样管理返回值

当然,定义了在运行时消息将被发送到目标对象,在本例中为
FillUp
。但是,此元素的类型是在静态时间内求解的。因此,编译器检查由
fillUpArray
返回的数组元素的静态类型,并且您使用了原始类型,因此动态类型将是
Object.class
的解算器。编译器发现对象元素不包含任何名为
fillUpArray
的方法

在解决方案中,您可以更改方法表单的签名:

private static ArrayList fillUpArray(Scanner scan). 

private static ArrayListfillUpArray(扫描仪扫描)。

您可以看到动态和静态类型的类型。

问题在于,您在静态方法返回的值中使用了原始类型
专用静态数组列表填充数组(扫描程序扫描)
。原始类型允许在生成集合时指定集合,而无需定义泛型类型。您可以查看原始类型。它允许维护与最旧的JVM(版本<5.0)的兼容性

所以,若您使用原始类型,则会强制集合使用正在强制转换到对象的项。在本例中,您定义
fillUpArray(Scanner scan)
返回
ArrayList
元素,我已经提到它是一个原始类型。因此,您可以像ArrayList一样管理返回值

当然,定义了在运行时消息将被发送到目标对象,在本例中为
FillUp
。但是,此元素的类型是在静态时间内求解的。因此,编译器检查由
fillUpArray
返回的数组元素的静态类型,并且您使用了原始类型,因此动态类型将是
Object.class
的解算器。编译器发现对象元素不包含任何名为
fillUpArray
的方法

在解决方案中,您可以更改方法表单的签名:

private static ArrayList fillUpArray(Scanner scan). 

private static ArrayListfillUpArray(扫描仪扫描)。

您可以看到动态类型和静态类型。

您返回的是原始
ArrayList
而不是泛型
ArrayList
。类型擦除再次发生。您返回的是原始
ArrayList
而不是泛型
ArrayList
。类型擦除
private static ArrayList fillUpArray(Scanner scan). 
private static ArrayList< FillUp> fillUpArray(Scanner scan).