Zamienienie metod typu void na metody zwracające

0

Cześć. Borykam się z moim błędnym nazewnictwem bądź nieumiejętnością zwrócenia.
Mam 4 metody, 2 które zwracają opcję menu pracownika bądź użytkownika i dwie, które zwracają cały case pracownika bądź użytkownika.
Gdybym w metodach getWorkerOptions czy `getClientOptions' wykonywał jakieś działa to wynik mógłbym sobie przypisac do zmiennej i ten wynik po prostu zwrócić, a w moim przypkadu jak to zrobić?
Może nazywam błędnie metody?

package CarRental;

import java.sql.SQLException;
import java.util.InputMismatchException;
import java.util.Scanner;

import CarRental.DataGetter.ClientDataGetter;
import CarRental.DataGetter.WorkerDataGetter;


public class CarRentalEngine {
    private int option;
    private Scanner input = new Scanner(System.in);
    private CarRentalOptions carRentalOptions = new CarRentalOptions();
    private ClientDataGetter clientDataGetter = new ClientDataGetter();
    private WorkerDataGetter workerDataGetter = new WorkerDataGetter();

    CarRentalEngine() throws SQLException {
    }

    void startCarRental() throws SQLException {

        System.out.println("Who are you?\n1. Customer\n2. Worker");
        try {
            switch (input.nextInt()) {
                case 1: {
                    getClientCase();
                    break;
                }
                case 2:
                    getWorkerCase();
                    break;
            }
        } catch (InputMismatchException e) {
            System.err.println("Your input is wrong!");
        }
    }


    private void getClientOptions(int option) throws SQLException {
        if (option >= 1 && option <= 5) {
            switch (option) {
                case 1:
                    carRentalOptions.rentACar(clientDataGetter.rentACar());
                    break;

                case 2:
                    carRentalOptions.returnACar(clientDataGetter.returnACar());
                    break;

                case 3:
                    carRentalOptions.populateTableRent(clientDataGetter.populateTableRent());
                    break;

                case 4:
                    carRentalOptions.populateTableViewCars(clientDataGetter.populateTableViewCars());
                    break;
                case 5:
                    break;
            }
        }
    }

    private void getWorkerOptions(int option) throws SQLException {

        if (option >= 1 && option <= 6) {
            switch (option) {
                case 1:
                    carRentalOptions.populateTableViewClients();
                    break;

                case 2:
                    carRentalOptions.populateTableViewCars(clientDataGetter.populateTableViewCars());
                    break;

                case 3:
                    carRentalOptions.makeCarAvailable(workerDataGetter.makeCarAavailable());
                    break;
                case 4:
                    carRentalOptions.makeCarUnavailable(workerDataGetter.makeCarUnavailable());
                    break;
                case 5:
                    carRentalOptions.createNewCar(workerDataGetter.createCar());
                case 6:
                    break;
            }
        }
    }

    private void getClientCase() throws SQLException {
        System.out.println("1. Have you inputted your data before?\nN/Y: ");
        if (input.next().toUpperCase().equals("N")) {
            carRentalOptions.createNewCustomer(clientDataGetter.createClient());
            System.out.println("Now you have your unique number clinet, use it where it is required!");
        } else {
            do {
                System.out.println("What do you want to do?");
                System.out.println("1. Rent a car\n2. Return a car\n3. Populate rented cars\n4. Populate cars\n5. Quit");
                option = input.nextInt();
                getClientOptions(option);
            }
            while (option != 5);
        }
    }

    private void getWorkerCase() throws SQLException {
        do {
            System.out.println("What do you want to do?");
            System.out.println("1. Populate clients\n2. Populate cars\n3. Make car available\n4. Make car unavailable\n5. Insert new car\n6. Quit");
            option = input.nextInt();
            getWorkerOptions(option);
        }
        while (option != 6);
    }
}

1
  1. Nie musisz sprawdzać, czy option mieści się w zakresie, bo switch i tak nie obsłuży case'ów, których nie ma.
  2. Jeśli chcesz, żeby funkcja zwróciła wartość, to zamiast void napisz typ zwracanej wartości i w ciele funkcji użyj return na wartości, którą chcesz zwrócić.
  3. Nazewnictwo nie ma nic do rzeczy, funkcja ma robić, to co każesz jej robić.

  1. Get raczej nie oznacza, pobierania danych od użytkownika, tylko od obiektu. Ja bym to nazwał askForOption... I zwróciłbym returnem to co wpisze użytkownik.
0
Spine napisał(a):
  1. Nie musisz sprawdzać, czy option mieści się w zakresie, bo switch i tak nie obsłuży case'ów, których nie ma.
  2. Jeśli chcesz, żeby funkcja zwróciła wartość, to zamiast void napisz typ zwracanej wartości i w ciele funkcji użyj return na wartości, którą chcesz zwrócić.
  3. Nazewnictwo nie ma nic do rzeczy, funkcja ma robić, to co każesz jej robić.
  1. Zmienione.
  2. Tak, ja to wiem. Ale jak mam zwrócić case ze switcha? Np. makeCarAvailable; jest voidem, więc tutaj się pojawia problem.
  3. Chyba ma, bo z tego co widze to z getClientCaseciężko cokolwiek zwrócić :D
void makeCarAvailable(Car car) throws SQLException {
        dataBase.makeCarAvailable(car);
    }
1
  1. Czemu chcesz zwrócić wynik tej metody? Z tego co widzę, to ostatecznie ta metoda, wykonuje akcję, sprawia, że auto jest dostępne. A jako parametr funkcji ze switchem podajesz numer opcji, więc powinieneś to nazwać np. executeOption(int optionIdx);.

  2. Ty to nazywałeś, każda funkcja może zwrócić wartość, obojętnie jak się nazywa.

Czemu się uparłeś, że trzeba coś zwracać?

0
  1. fakt, czyli nazwa zła.
  2. No tak, każda z funkcji może coś zwrócić, ale nie rozumiem do końca tego co napisałeś. Tak więc i tutaj mam złą nazwę.
  3. w takim razie dla getClientCase można dać executeClientCase ? Identycznie jak dla `executeClientOptions'

W sumie to nie wiem. Jakoś tak wymyśliłem sobie w głowie, że jeśli wymagam czegoś by coś mi zwróciło, a zwraca mi właśnie przypadek klienta/pracownika to stworzyłem metodę zwracającą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1