Koduję, żeby symulator biletu parkingowego działał. Mam wiele klas, z których najważniejsze to zaparkowany samochód, parking, bilet i klasa funkcjonariusza policji. Teraz napisałem metodę, w której jako parametr biorę zmienną licensePlateNumber z ParkedCar i muszę uzyskać liczbę ParkingTicket dla samochodu. Otrzymuję błąd w klasie testowej, którą mam poniżej, z tego powodu nie będzie się kompilować. Metoda jest następująca

Klasa funkcjonariusza policji

public int getParkingTicketsCountForACar(ParkedCar licensePlateNumber){
int numberOfTickets = 0;
String carPlateNumber = licensePlateNumber.getLicensePlateNumber();
for(ParkingTicket ticket: ticketList){
if(carPlateNumber.equalsIgnoreCase(ticket.getCarLicensePlateNumber())){
numberOfTickets++
}
return numberOfTickets;
}

Klasa testowa

public void testGetParkingTicketsCountForACar() {

    PoliceOfficer p = new PoliceOfficer("Adam White","RCMP5225");
    ParkedCar car = new ParkedCar("Bob Smith", "Porsche", 2015, "1A2B3C", 65);
    ParkingMeter meter = new ParkingMeter("Burnaby",false,10.5,60);
    p.issueParkingTicket(car, meter);
    ParkedCar car2 = new ParkedCar("Scott Marks", "Ford", 2010, "MYCAR", 30);
    meter.setNumberOfPurchasedMinutes(1);
    p.issueParkingTicket(car2, meter);
    car.setNumberOfMinutesParked(125);
    meter.setNumberOfPurchasedMinutes(20);
    p.issueParkingTicket(car, meter);
    assertEquals(2,p.getParkingTicketsCountForACar("1a2B3c"));

Na samym końcu pojawia się błąd „1a2b3c” mówiący, że java.lang.String nie może zostać przekonwertowany na ParkedCar. Czy istnieje sposób, aby to naprawić bez użycia metody zastąpienia ciągu?

1
onesnapthanos 2 kwiecień 2020, 10:08

3 odpowiedzi

Najlepsza odpowiedź

Przekazujesz wartość ciągu z licensePlateNumber oraz w metodzie

public int getParkingTicketsCountForACar(ParkedCar licensePlateNumber){}

Oczekujesz wprowadzenia typu ParkedCar, a następnie wyodrębniasz LicensePlateNumber. możesz zmniejszyć tę metodę tylko do:

public int getParkingTicketsCountForACar(String licensePlateNumber){
    for(ParkingTicket ticket: ticketList){
    if(licensePlateNumber.equalsIgnoreCase(ticket.getCarLicensePlateNumber())){
        numberOfTickets++
    }
    return numberOfTickets;
}
2
Alufoil 2 kwiecień 2020, 07:26

Ta metoda akceptuje typ ParkedCar

public int getParkingTicketsCountForACar(ParkedCar licensePlateNumber){}

Ale ty próbujesz przekazać String

assertEquals(2,p.getParkingTicketsCountForACar("1a2B3c"));
0
Артем Хворов 2 kwiecień 2020, 07:13

Musisz albo zmienić swoją metodę

public int getParkingTicketsCountForACar(ParkedCar licensePlateNumber){ ...

Do

public int getParkingTicketsCountForACar(String carPlateNumber){ ...

I po prostu usuń drugą linię w metodzie,
LUB musisz przekazać metodzie rzeczywiste odniesienie do obiektu ParkedCar.

0
bkis 2 kwiecień 2020, 07:26