Java返回和数组/返回多种数据类型

时间:2011-12-05 09:42:40

标签: java arrays object methods

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

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());

    }**

8 个答案:

答案 0 :(得分:2)

在Java中,方法可以返回Object,原语或数组。如果需要返回多个值,通常使用数组或一些List。

例如(数组):

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

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

    return result;
}

或使用List:

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

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

    return result;
}

答案 1 :(得分:2)

声明

学生[]学生;

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();
    }

保持同样的执行......

答案 2 :(得分:1)

您只能返回一个值。但是这个值可以是一个数组/列表等。所以你可以从方法中返回学生并使用它没有任何问题。

答案 3 :(得分:1)

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

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

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

对于不同类型的多个值:

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

但是,您还没有真正告诉我们您正在尝试/想要做什么,使该代码段基本没有意义。

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

无法返回多个值。但是您可以轻松地创建一个包装类,它可以获取所有值,并返回该值。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

请注意,DTO只是一个奇特的术语 - 任何能够同时保存对多种数据类型的引用的数据结构都应该有效。