Java 在另一个类中使用arraylist中的指定值

Java 在另一个类中使用arraylist中的指定值,java,arraylist,Java,Arraylist,java新手,我正在制作一个学生记录系统。 我想在这段代码中使用存储在arraylist中的指定年份(我已经使用了一个数组列表,因为我计划最终使这个循环允许多个输入) 结果代码再次出现 import java.util.ArrayList; import java.util.Scanner; public class Results { public static void Results(StudentYear studentYear) { int yea

java新手,我正在制作一个学生记录系统。 我想在这段代码中使用存储在arraylist中的指定年份(我已经使用了一个数组列表,因为我计划最终使这个循环允许多个输入)

结果代码再次出现

import java.util.ArrayList;
import java.util.Scanner;

public class Results 
{
    public static void Results(StudentYear studentYear)
    {

        int year = studentYear.getStudentYear().get(0); 
        ArrayList<Integer> results = new ArrayList<Integer>();
        Scanner sc = new Scanner(System.in); 
        System.out.println("Please enter the results for "+year+":");
        results.add(sc.nextInt());
        System.out.println(results);

        }
    }
import java.util.ArrayList;
导入java.util.Scanner;
公开课成绩
{
公共静态无效结果(StudentYear StudentYear)
{
int year=studentYear.getStudentYear().get(0);
ArrayList结果=新建ArrayList();
扫描仪sc=新的扫描仪(System.in);
System.out.println(“请输入“+年+”的结果:”;
结果:添加(sc.nextInt());
系统输出打印项次(结果);
}
}

您正在调用
get
的对象是
StudentYear
对象,而不是
ArrayList

您已经有了获取ArrayList的方法,因此只需使用它,然后从它返回的ArrayList中获取元素:

int year = studentYear.getStudentYear().get(0);
至于你的第二个问题:

(首先,唯一以大写字母开头的方法是按约定的构造函数)

您应该将
Results
方法重新编写为构造函数。然后,您需要将一些内容移动到新方法

下面是我如何构造结果对象:

改变

public static void Results(StudentYear studentYear)...

请注意,该方法的其余部分已被删除,并且应该位于单独的方法中(以了解为什么只查找构造函数及其用途)。而
this.year=year
行仅仅意味着您有一个名为
year
的字段,就像您的
studentYear
数组一样。将为其指定构造对象时使用的值。然后,您的其他方法将能够使用此值

构造此对象时,您将执行以下操作:

StudentYear yearInputobject = new StudentYear();
int year = yearInputobject.getStudentYear();
Results resultsInputobject = new Results(year);
resultsInputobject.printResults();

请注意,我也修改了StudentYear,我有一个名为
getStudentYear()
的方法,它直接返回一个int。

您在
StudentYear
对象上调用的是
get
,而不是
ArrayList

您已经有了获取ArrayList的方法,因此只需使用它,然后从它返回的ArrayList中获取元素:

int year = studentYear.getStudentYear().get(0);
至于你的第二个问题:

(首先,唯一以大写字母开头的方法是按约定的构造函数)

您应该将
Results
方法重新编写为构造函数。然后,您需要将一些内容移动到新方法

下面是我如何构造结果对象:

改变

public static void Results(StudentYear studentYear)...

请注意,该方法的其余部分已被删除,并且应该位于单独的方法中(以了解为什么只查找构造函数及其用途)。而
this.year=year
行仅仅意味着您有一个名为
year
的字段,就像您的
studentYear
数组一样。将为其指定构造对象时使用的值。然后,您的其他方法将能够使用此值

构造此对象时,您将执行以下操作:

StudentYear yearInputobject = new StudentYear();
int year = yearInputobject.getStudentYear();
Results resultsInputobject = new Results(year);
resultsInputobject.printResults();

请注意,我也修改了StudentYear,我有一个名为
getStudentYear()
的方法,它直接返回int。

a
NullPointerException
不是编译时错误。而且,我记得您说过在使用
get
时出现编译时错误。您是否用新问题更新了问题?该错误现在已消失:)NullPointerException不是编译时错误。而且,我记得您说过在使用
get
时出现编译时错误。您是否用新问题更新了您的问题?该错误现在已消失:)谢谢,该错误已消除。现在当涉及到编译时,我在主代码中得到了错误(我已经用这个更新了OP)。我不明白为什么。@user3050340您不能这样做:
resultsInputobject=newresults()因为结果需要一个参数
StudentYear
。而且,只有构造函数以大写字母开头,它们不使用关键字
static
void
。你应该读一本教程。只要读一章关于对象和类的内容,仍然很困惑!当你说返工方法可以成为构造器时,你能详细说明一下吗?我在这个项目上工作了一整天,实际上没有任何进展,因为我很难将所有这些类链接回主类来使用它们的方法。我一定会接受答案:)谢谢,这样就消除了错误。现在当涉及到编译时,我在主代码中得到了错误(我已经用这个更新了OP)。我不明白为什么。@user3050340您不能这样做:
resultsInputobject=newresults()因为结果需要一个参数
StudentYear
。而且,只有构造函数以大写字母开头,它们不使用关键字
static
void
。你应该读一本教程。只要读一章关于对象和类的内容,仍然很困惑!当你说返工方法可以成为构造器时,你能详细说明一下吗?我在这个项目上工作了一整天,实际上没有任何进展,因为我很难将所有这些类链接回主类来使用它们的方法。我一定会接受答案:)
public Results(int year) {
    this.year = year;
}
StudentYear yearInputobject = new StudentYear();
int year = yearInputobject.getStudentYear();
Results resultsInputobject = new Results(year);
resultsInputobject.printResults();