Java, сравнивающая две строки, похоже, не работает - PullRequest
1 голос
/ 21 августа 2011

Я получил эту функцию, которая является private boolean функцией, которая проверяет, есть ли в гараже автомобиль уже такого же размера. Если нет, я добавляю его в arrayList, я сделал функцию типа printList(), прежде чем пройти через arraylist и распечатать значения (что прекрасно работает), но моя функция private boolean почему-то не кажется, работает на всех.

Вот мой код:

public class Cars {

    public Cars (String size, boolean booking) {
        this.carSize = size;
        this.isBooked = booking;
    }

    public String getSize() {
        return this.carSize;
    }

    public boolean checkBook () {
        return this.isBooked;
    }

    private String carSize;
    private boolean isBooked;

}

public class Locations {

    public Locations (String curLocation) {
        garage = new ArrayList<Cars>();
        location = curLocation;
    }

    public void addCar (String size, boolean booking) {
        if (garage.isEmpty() || !checkCar(size)) {
            garage.add(new Cars(size, booking));
            System.out.println("Car assigned " + location + " " + size);
        }
    }

    private boolean checkCar (String size) {
        for (Cars car : garage) {
            System.out.println("hey");
            if (size.equals(car.getSize())) return true;
        }
        return false; 
    }

    private ArrayList <Cars> garage;
    private String location;

}

Вводится следующее:

Car small City
Car small Redfern
Car small Redfern

выход:

Car assigned City small
Car assigned Redfern small
Car assigned Redfern small

он никогда не должен распечатывать второй маленький Редферн, поскольку в списке уже есть машина этого размера.

Ответы [ 3 ]

1 голос
/ 21 августа 2011

Если я использую ваш код следующим образом:

public class Main
{
    public static void main( String[] args )
    {
        Locations locationsCity = new Locations( "City" );
        locationsCity.addCar( "small", true );
        Locations locationsRedfern = new Locations( "Redfern" );
        locationsRedfern.addCar( "small", true );
        locationsRedfern.addCar( "small", true );
    }
}

это вывод, который я получаю:

Car assigned City small
Car assigned Redfern small
hey

, который выглядит просто отлично и в соответствии с вашим кодом.

1 голос
/ 21 августа 2011

(Мой предыдущий ответ был неверным - я неправильно прочитал код в своей спешке ...)

Я могу придумать только одно объяснение того, что происходит:

Вы дважды звонили new Locations("Redfern").

Это объясняет, почему вы видите сообщение Car assigned Redfern small дважды, и почему вы НЕ видите hey.

Вы можете подтвердить это, поместив трассировку в конструктор Locations ...


Теория, что это вызвано ведущими / замыкающими пробелами на одной из size строк, не содержит воды. Если бы это была проблема, OP видел бы hey, поскольку метод checkCar повторял список garage.

0 голосов
/ 21 августа 2011

Подумайте о том, чтобы поставить свои машины в набор и реализовать метод equals (), чтобы просто проверить размер с помощью метода String.equals ().

...