Как сравнить два отдельных типа в списке, используя пользовательский ввод? - PullRequest
0 голосов
/ 23 февраля 2020

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

public static void initializeCruiseList() {
    Cruise newCruise = new Cruise("Southern Swirl", "Candy Cane", "Miami", "Cuba", "Miami");
    cruiseList.add(newCruise);

    Cruise newCruiseTwo = new Cruise("Hippy Train", "Ole Bertha", "Baltimore", "The 70s", "Baltimore");
    cruiseList.add(newCruiseTwo);
}

Проблема, с которой я сталкиваюсь, заключается в том, что ввод для раздела «Название корабля» в «addCruise» необходимо проверить, чтобы убедиться, что Корабль уже существует, а также необходимо проверьте, находится ли этот корабль в эксплуатации, который существует как логическое значение в пределах shipList. Список кораблей выглядит так:

    public static void initializeShipList() {
    add("Candy Cane", 20, 40, 10, 60, true);
    add("Peppermint Stick", 10, 20, 5, 40, true);
    add("Bon Bon", 12, 18, 2, 24, false);
    add("Candy Corn", 12, 18, 2, 24, false);
}

Часть, с которой у меня возникают проблемы, сравнивает пользовательский ввод в методе "addCruise" с именем корабля И логической переменной, учитывая, что пользователь вводит только Строка. В настоящее время это то, что у меня есть:

System.out.println("Enter ship name: ");
    String newShipName = newCruiseInput.nextLine();

    for(Ship eachShip: shipList) {
        if((eachShip.getShipName() != newShipName) && (eachShip.getInService() == false)) {
            System.out.println("This ship doesn't exist or isn't in service.");
            return;
        }
    }

Я почти уверен, что проблема с этой текущей настройкой заключается в том, что она выполняет итерацию по всему списку, и, несмотря ни на что, она всегда найдет запись "false". "заставить код действовать так, как будто пользователь ввел неверную запись, даже если он этого не сделал. Итак, как мне go найти имя корабля в записи и затем проверить, чтобы убедиться, что выбранный корабль в данный момент находится в эксплуатации? Если вам нужно больше информации, чем это, просто спросите, и я сделаю все возможное, чтобы предоставить больше.

Ответы [ 4 ]

0 голосов
/ 23 февраля 2020

Проблема с условием if в вашем for l oop. Поскольку он не выполняет итерацию по всему списку и возвращает void всякий раз, когда обнаруживается первый несопоставимый результат.

Что вы можете сделать, отфильтровать все элементы, которые соответствуют названиям ваших кораблей, с помощью введенного пользователем названия корабля, и затем проверьте, является ли список пустым.

Если он пуст, это означает, что он не существует, и наоборот в другом случае.

Ваш код должен выглядеть примерно так :

if(shipList
        .stream()
        .filter(!eachShip -> eachShip.getShipName().equals(newShipName) 
            && !eachShip.getInService)
        .collect(Collectors.toList())
        .isEmpty()) {
        // Not found
} else {
       // Found the ship
}

Надеюсь, это имеет смысл.

0 голосов
/ 23 февраля 2020

Попробуйте использовать флаг

boolean shipFound = false;
for(Ship eachShip: shipList) {
        if((eachShip.getShipName().equals(newShipName)) && (eachShip.getInService() == true)) {
            shipFound=true;
            break;
        }
    }
if(shipFound)
// Do what you want
0 голосов
/ 23 февраля 2020

Ваш лог c в for l oop неверен. По вашему требованию вы должны сначала выяснить, есть ли корабль в вашем списке в l oop. Если вы не нашли его, вам нужно разобраться с этой ситуацией. Но если вы найдете его, вам нужно проверить, работает ли он. Вы не можете объединить их обоих в одно условие. Кроме того, обратите внимание, что для сравнения строк вам нужно использовать equals () метод String, а не ! =

0 голосов
/ 23 февраля 2020

Как насчет замены, если в вашем условии для l oop что-то вроде этого

for(Ship eachShip: shipList) {
    if( (!eachShip.getShipName().equals(newShipName)) || (eachShip.getShipName().equals(newShipName) && eachShip.getInService() != false) ) {
        System.out.println("This ship doesn't exist or isn't in service.");
        return;
    }else {
     //do add ship
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...