Java Returning и массив / возврат нескольких типов данных - PullRequest
1 голос
/ 05 декабря 2011

Я создал свой массив в методе и некоторые переменные, которые должны использоваться другими методами.Я не уверен, что вы можете вернуть несколько значений.Если кто-то может указать мне правильное направление, чтобы я мог закончить это, мы будем очень признательны за помощь.Часть, с которой у меня проблемы, заключена в **

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 ]

2 голосов
/ 05 декабря 2011

Declare

Студент [] студенты;

переменная-член для класса 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 голосов
/ 05 декабря 2011

В 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;
}
1 голос
/ 05 декабря 2011

Вы можете вернуть только одно значение, но это значение может быть ссылкой на объект, который в свою очередь имеет ссылки на другие объекты.Таким образом, можно вернуть массив, список и т. Д.

Тем не менее, ваш метод retrieveStuId выглядит так, как предполагается найти одного студента (с совпадающим идентификатором), поэтому он может быть логичнымдля этого метода, чтобы вернуть одного студента.Затем метод должен вернуть найденного студента (или ноль, или любой другой индикатор «не найден»). Что-то вроде

public Student retrieveStuId() {
    int searchId = askForStudentId();
    for (Student student: students) {
        if (student.getId == searchId) {
          return student;
        }
    }
    // No student found
    return null;
}
1 голос
/ 05 декабря 2011

Вы не можете вернуть несколько значений в Java, однако у вас есть несколько альтернатив.

Чтобы «вернуть» несколько значений одного типа:

  • Возвращать массив
  • Возвращает контейнер, такой как ArrayList

Для нескольких значений различных типов:

  • Возвращает объект, такой как Student объект, который содержит / оборачивает несколько переменных экземпляра, таких как firstName и lastName, которые могут быть тем, что вы хотите изменить и вернуть.Или, например, класс Point, который может обернуть две координаты.
  • Передать объекты в метод и изменить эти объекты, поскольку все объекты передаются по ссылке в Java.Если вам нужно передать примитив, такой как int или double, вы можете использовать классы-оболочки Integer и Double.

Однако вы еще не сказалинам, что вы пытаетесь / хотите сделать, делая этот фрагмент кода по сути бессмысленным.

1 голос
/ 05 декабря 2011

Вы можете вернуть только одно значение.Но это одно значение может быть массивом / списком и т. Д. Таким образом, вы можете вернуть студентов из метода и использовать его без проблем.

0 голосов
/ 13 ноября 2013

Концепция объектов передачи данных (DTO) или Value Objects (VO) может использоваться для возврата нескольких типов данных из вызова метода.Создайте свой DTO / VO как POJO с полями, соответствующими различным типам данных, которые вы хотите вернуть;затем заполните экземпляр DTO в вашем методе и верните этот DTO.

Обратите внимание, что DTO - это просто модный термин - любая структура данных, способная хранить ссылки на несколько типов данных одновременно, должна работать.

0 голосов
/ 05 декабря 2011

Вы можете использовать различные структуры данных, такие как Array, ArrayList, Vector, в качестве возвращаемого типа метода и поместить в него несколько значений.

0 голосов
/ 05 декабря 2011

Невозможно вернуть несколько значений. Но вы можете легко создать класс-оболочку, который может принимать все значения и возвращать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...