【问题标题】:Java Returning and array/returning multiple data typesJava返回和数组/返回多种数据类型
【发布时间】:2012-01-13 01:54:16
【问题描述】:

我在一个方法中创建了我的数组和一些需要由其他方法使用的变量。我不确定您是否可以返回多个值。如果有人能指出我正确的方向,以便我完成这个,你的帮助将不胜感激。我遇到问题的部分包含在**中

import java.util.Scanner;

public class Project1{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
Project1 project1 = new Project1();
project1.mainMenu();


}//main


public void enterStudents(){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter number of students");
    int numOfStudents = input.nextInt();
    Student[] students = new Student[numOfStudents];
    int i;
    for(i = 0; i <= numOfStudents - 1; i++){
        System.out.println("Enter student's ID: ");
        int id = input.nextInt();
        System.out.println("Enter student's first name: ");
        String first = input.next();
        System.out.println("Enter student's last name: ");
        String last = input.next();
        System.out.println("Enter student's class: ");
        String stuClass = input.next();
        Student x = new Student(id,first,last,stuClass);
        students[i] = x;
    }


}

**public void retrieveStuId(){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter student id");
    int searchID = input.nextInt();
    int i;
    for(i = 0; i <= numOfStudents - 1; i++){
        int search = students[i].getId;
        if (studentID = searchID)
            System.out.println(students[i].toString());

    }**

【问题讨论】:

标签: java arrays object methods


【解决方案1】:

在 Java 中,方法可以返回一个对象、原语或数组。如果需要返回多个值,通常使用数组或列表。

例如(数组):

int[] getManyValues() {
    int resultCount = getResultCount();
    int[] result = new int[resultCount];

    for (int i=0;i<resultCount;i++) {
        result[i] = getNextResult();
    }

    return result;
}

或与列表:

List<Integer> getManyValues() {
    List<Integer> result = new ArrayList<Integer>();

    while (hasMoreResults()) {
        result.add(getNextResult());
    }

    return result;
}

【讨论】:

    【解决方案2】:

    声明

    Student[] 学生;

    Project1 类的成员变量

    public class Project1 {
    
    
        Student[] students ;
    ...
    

    然后

    public void retrieveStuId(){
            Scanner input = new Scanner(System.in);
            System.out.println("Enter student id");
            int searchID = input.nextInt();    
            for (int j = 0; j < students.length; j++) {
                Student student = students[j];
                 int search = student.getId();
                    if (search == searchID)
                        System.out.println(student.toString());
            }
    
        }
    

    将此添加到主菜单

    public void mainMenu() {
            Scanner input = new Scanner(System.in);
            System.out.println("1 - Enter student info");
            System.out.println("2 - Retrieve student by ID");
            System.out.println("3 - Retrieve student by last name");
            System.out.println("4 - Update student");
            System.out.println("5 - Exit");
            int menuSelect = input.nextInt();
    
            switch (menuSelect) {
            case 1:
                enterStudents();
                break;
            case 2:
                System.out.print("case 2");
                retrieveStuId();
    
                break;
            case 3:
                System.out.print("case 3");
                break;
            case 4:
                System.out.print("case 4");
                break;
            default:
                System.out.println("That is not a option");
    
            }
            mainMenu();
        }
    

    保持相同的执行......

    【讨论】:

    • 谢谢,我通过并添加了这个,然后又出现了一个新问题,那就是空指针。有人告诉我这是因为 student.get(): 没有返回任何东西。我正坐在这里试图解决这个问题,但又卡住了。
    • 是的,因为在你添加一些学生之后......程序退出......在主菜单末尾添加 mainMenu()......保持控制台运行并尝试这样
    【解决方案3】:

    您只能返回一个值,但该值可以是对一个对象的引用,而该对象又具有对其他对象的引用。所以可以返回一个数组、一个列表等。

    但是,您的方法 retrieveStuId 看起来应该找到一名学生(具有匹配的 id),因此该方法返回一名学生可能是合乎逻辑的。然后该方法需要返回找到的学生(或 null 或任何其他“未找到”指示符。类似的东西

    public Student retrieveStuId() {
        int searchId = askForStudentId();
        for (Student student: students) {
            if (student.getId == searchId) {
              return student;
            }
        }
        // No student found
        return null;
    }
    

    【讨论】:

      【解决方案4】:

      您只能返回一个值。但是该值可以是数组/列表等。因此您可以从该方法返回学生并毫无问题地使用它。

      【讨论】:

        【解决方案5】:

        您不能在 Java 中返回多个值,但是您有几个选择。

        要“返回”多个相同类型的值:

        • 返回一个数组
        • 返回一个容器,例如ArrayList

        对于不同类型的多个值:

        • 返回一个对象,例如Student对象,它包含/包装了多个实例变量,例如firstNamelastName,这可能是你想要修改并返回的。或者例如一个可能包含两个坐标的Point 类。
        • 将对象传递给方法并修改这些对象,因为在 Java 中所有对象都是通过引用传递的。如果您需要传递一个原语,例如intdouble,您可以使用包装类IntegerDouble

        但是,您并没有真正告诉我们您正在尝试/想要做什么,这使得该代码 sn-p 基本上毫无意义。

        【讨论】:

          【解决方案6】:

          不能返回多个值。但是你可以很容易地创建一个包装类,它可以接受所有的值,然后返回。

          【讨论】:

            【解决方案7】:

            您可以使用不同的数据结构,如 Array、ArrayList、Vector 作为方法的返回类型,并将多个值放入其中。

            【讨论】:

              【解决方案8】:

              数据传输对象 (DTO) 或值对象 (VO) 的概念可用于从方法调用返回多种数据类型。将您的 DTO/VO 构建为 POJO,其字段对应于您要返回的不同数据类型;然后在您的方法中填充 DTO 实例,并返回该 DTO。

              请注意,DTO 只是一个花哨的术语——任何能够同时保存对多种数据类型的引用的数据结构都应该可以工作。

              【讨论】:

                猜你喜欢
                • 2021-04-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-09-09
                • 2011-06-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多