【问题标题】:Calling an Object array调用对象数组
【发布时间】:2020-06-04 18:43:44
【问题描述】:

我想知道对“对象数组”进行函数调用的正确方法。我不确定,我的第一个想法是对象变量的范围是 to 函数的本地导致函数调用错误。我的第二个想法是我应该首先在 main 中声明对象。


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    //Function Calls
    returnObjectArray();
    scanner();
    userInput(studentInfos,input ); //ERROR HERE is on the function call of Object Array



    }

    public static Object[] returnObjectArray() {

        StudentInfo[] studentInfos = new StudentInfo[2];
        return studentInfos;
    }

    public static Object scanner() {

        Scanner input = new Scanner(System.in);
        return input;

    }

    public static Object[] userInput(StudentInfo [] studentInfos, Scanner input) {
        int emplid;
        double quiz1;
          for (int i = 0; i < studentInfos.length; i++) {

            System.out.println("Enter student emplid number");
            studentInfos[i] = new StudentInfo();
            emplid = input.nextInt();
            studentInfos[i].setEmplid(emplid);

            System.out.println("Enter Quiz one percentage");
            quiz1 = input.nextDouble();
            studentInfos[i].setQuizScoreOne(quiz1);

            System.out.println("Enter Quiz two percentage");
            quiz1 = input.nextDouble();
            studentInfos[i].setQuizScoreTwo(quiz1);

            System.out.println("Enter Quiz three percentage");
            quiz1 = input.nextDouble();
            studentInfos[i].setQuizScoreThree(quiz1);
          }

        return studentInfos ;

    }

}


【问题讨论】:

  • 退货又丢了,所以想抢退货?

标签: java arrays object


【解决方案1】:

在方法内部声明的StudentInfo[]的范围,returnObjectArray是该方法的本地。此外,一旦方法 returnObjectArray 返回,此数组将被垃圾收集。与在方法内声明的Scanner 对象scanner 的情况类似。

首先,替换如下方法:

public static StudentInfo[] returnObjectArray() {
    StudentInfo[] studentInfos = new StudentInfo[2];
    return studentInfos;
}

public static Scanner scanner() {
    Scanner input = new Scanner(System.in);
    return input;
}

然后,将这些方法的返回值收集到各自类型的变量中,并传递给userInput,如下所示:

StudentInfo[] studentInfos = returnObjectArray();
Scanner input = scanner();
userInput(studentInfos, input);

【讨论】:

    【解决方案2】:

    对 studentInfo[] 的引用在 returnObjectArray() 方法之外不可见;它是本地参考。但是,您可以在调用(main)方法中创建一个新引用,并将被调用方法的返回值分配给它。 StudentInfo[] studentInfos = returnObjectArray();

    【讨论】:

    • 为什么 studentInfo[] 在方法 returnObjectArray() 之外不可见。
    • 因为studentInfo是一个局部变量,把它想象成一堆盒子。一个大盒子是静态字段,里面是实例字段(你没有),然后里面是所谓的局部变量。那个盒子就是方法。方法无法到达其他“盒子”(方法)内部的变量。在您的情况下,您需要将 returnObjectArray 重新调整的数组分配给 main 内的局部变量,然后您可以将其传递给另一个方法。
    • 另外,您应该使用 IDE(IntelliJ 是我个人最喜欢的),IDE 将帮助您更轻松地解决这些问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    相关资源
    最近更新 更多