2011-12-05 81 views
1

我在一个方法中创建了我的数组以及其他方法需要使用的一些变量。我不确定您是否可以返回多个值。如果任何人都可以指出我正确的方向,所以我可以完成这一点,你将不胜感激。我遇到问题的部分包含在**中Java返回并排列/返回多个数据类型

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

    }** 
+0

你没有努力提供[简单自包含的正确示例](http://pscode.org/sscce.html)。请将您的代码降低到绝对**最小值**,以显示问题! – Bohemian

回答

1

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

然而,你的方法retrieveStuId看起来它应该是找到一个学生(与匹配的ID),所以它可能是合乎逻辑的该方法返回一个学生。然后,该方法需要返回发现学生(或空或任何其他“未找到”的指标。沿着东西线

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

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

1

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

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<Integer> getManyValues() { 
    List<Integer> result = new ArrayList<Integer>(); 

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

    return result; 
} 
1

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

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

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

对于不同类型的多个值:

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

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

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

为了保持在同一个执行....

+0

谢谢你,我经历了,并添加了这个新的问题已经到达,这是空指针。有人告诉我这是因为student.get():不会返回任何东西。我坐在这里试图解决这个问题,但再次陷入困境。 – Gnosis

+0

是的,因为你添加一些学生后...程序exit..add mainMenu()在主菜单结束...保持控制台运行,并尝试像这样 – Cris

0

您可以使用不同的数据结构像阵列,ArrayList中,向量方法的返回值类型和把你的多个值放在它里面

0

数据传输对象(DTO)或数值对象(VO)的概念可以用来从方法调用中返回多个数据类型将DTO/VO设置为POJO,您要返回的不同数据类型;然后在您的方法中填充DTO实例,并返回该DTO。

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