Java, создающий условный оператор, который отправляет сообщение, если ни одно из элементов не совпадает с именем ввода? - PullRequest
0 голосов
/ 28 сентября 2019

Я заранее прошу прощения, если информации не хватает, это для меня ново!

Так что задания говорят;есть гостиница для домашних животных (собак, кошек и змей), и программа должна распечатать, сколько еды и какую еду они должны есть.Пользователь пишет имя питомца, и он должен напечатать, что он делает.

Что я не понимаю, так это как написать условное утверждение, которое говорит, что если ни один из имен элемента не совпадает с вводом имени, напишите «У нас нет домашних животных с именем (входом) в нашем отеле».

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

import javax.swing.*;

public class Main {

public static void main(String[] args) {

    Dog d1 = null;
    Dog d2 = null;
    Cat c1 = null;
    Cat c2 = null;
    Snake s1 = null;

    try {
        d1 = new Dog("Sixten", 5);
        d2 = new Dog("Dogge", 10);
        c1 = new Cat("Venus", 5);
        c2 = new Cat("Ove", 3);
        s1 = new Snake("Hypno", 1);
    } catch (IllegalArgumentException e) {
        System.out.println(e.getMessage());
        System.exit(0);
    }

    Hotel h1 = new Hotel();
    h1.addPet(d1);
    h1.addPet(d2);
    h1.addPet(c1);
    h1.addPet(c2);
    h1.addPet(s1);

    h1.getPets(); // gets the list with all the pets

    while (true) {
        String input = JOptionPane.showInputDialog("What pet(name of pet) needs feeding?");
        if (input == null){
            System.exit(0);
            break;
        }
        else if(input.equals("")){
            JOptionPane.showMessageDialog(null, "Invalid input!");

        }// HERE IS WHERE I WANT THE STATEMENT
        else if(**Statement that says if input isn't equal to any of the animal's name**){

        }
        else{
            input = input.toLowerCase();

            for(Pet pet: h1.getPets()){

                String text1 = String.format("%s%10s%10s\n", "Namn:", "Mått:", "Sort:");
                String text2 = String.format("%s%10.2f%16s", pet.getName(), pet.measureFood(), pet.getFoodName());
                String text3 = "---------------------------------------\n";
                text1 = text1 + text3 + text2;


                if (pet.getName().toLowerCase().equals(input)) {
                    JOptionPane.showMessageDialog(null,text1);
                    break;
                }
            }


        }
    }

}

}

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

На самом деле там вам не нужны дополнительные условия.

Если вы написали отдельное условие, чтобы проверить, совпадают ли имена питомцев с входными данными, то вы бы перебрали список питомцев.дважды, что является избыточным.

Обратите внимание, что если домашнее животное найдено, if внутри for будет запущено.Мы можем установить для переменной boolean значение true в if и проверить ее после цикла, чтобы увидеть, найдено ли домашнее животное:

// in the else branch of the outermost if
boolean petFound = false; // note this line
input = input.toLowerCase();

for(Pet pet: h1.getPets()){

    String text1 = String.format("%s%10s%10s\n", "Namn:", "Mått:", "Sort:");
    String text2 = String.format("%s%10.2f%16s", pet.getName(), pet.measureFood(), pet.getFoodName());
    String text3 = "---------------------------------------\n";
    text1 = text1 + text3 + text2;


    if (pet.getName().toLowerCase().equals(input)) {
        JOptionPane.showMessageDialog(null,text1);
        petFound = true; // note this line
        break;
    }
}
if (!petFound) {
    // show the message that there is no pet with the input name
}
1 голос
/ 28 сентября 2019

Вы можете использовать флаг "petFound" и установить для него значение true в цикле for, если питомец был найден.После цикла проверьте значение флага и напечатайте сообщение not found, если флаг имеет значение false.

Если вы просматриваете Java8, замените цикл

Optional<Pet> pet = h1.getPets().stream().filter(pet.getName().toLowerCase().equals(input)).findFirst();
if(pet.isPresent()){
    pet.get();// gives the pet
}
else{
    // Print pet not found
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...