Сопоставление ввода пользователя с массивом строк в Java? - PullRequest
0 голосов
/ 02 ноября 2018

Я невероятно новичок в Java, и мне было дано следующее задание:

  • Напишите Java-программу, которая попросит пользователя ввести трехбуквенное имя части тела, которое должно быть в «официальном» списке трехбуквенных частей тела. (Рука, ухо, глаз, десна, бедро, челюсть, нога, губа, ребро, носок)
  • Если пользователь правильно сделал предположение, отобразите правильное предположение как часть списка.
  • Позвольте пользователю продолжать догадываться, пока у него не будет всех 10.
  • Если часть тела неправильная, отобразить соответствующее сообщение.
  • Показать количество предположений, которые они сделали, в том числе правильные.

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

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    String[] bodyparts = new String [10];

    bodyparts[0] = "Arm";
    bodyparts[1] = "Ear";
    bodyparts[2] = "Eye";
    bodyparts[3] = "Gum";
    bodyparts[4] = "Hip";
    bodyparts[5] = "Jaw";
    bodyparts[6] = "Leg";
    bodyparts[7] = "Lip";
    bodyparts[8] = "Rib";
    bodyparts[9] = "Toe";

    Set<String> bodypartSet = new TreeSet<>();
    Collections.addAll(bodypartSet, bodyparts);

    System.out.println("Please enter a 3 letter body part: ");
    String bodypart = input.nextLine();

    if (bodypartSet.contains(bodypart)) {
        System.out.println("Correct,  " + bodypart + " is on the list!");
    } else {
        System.out.println("Nope, try again!");
    }

}

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Для этого нужен цикл, иначе он будет запрашивать ввод только один раз.

Что-то подобное должно делать:

    ArrayList<String> bodyParts = new ArrayList<String>();

    bodyParts.add("Arm");
    bodyParts.add("Ear");
    bodyParts.add("Eye");
    bodyParts.add("Gum");
    bodyParts.add("Hip");
    bodyParts.add("Jaw");
    bodyParts.add("Leg");
    bodyParts.add("Lip");
    bodyParts.add("Rib");
    bodyParts.add("Toe");
    String input = "";
    int totalGuesses = 0;

    Scanner sc = new Scanner(System.in);

    System.out.println("Start guessing...");

    while (!bodyParts.isEmpty()) {
        totalGuesses++;
        input = sc.nextLine();
        if (input.length() != 3 || !bodyParts.contains(input)) {
            // incorrect, do nothing
            System.out.println("Nope.");
        } else {
            // correct, remove entry
            bodyParts.remove(input);
            System.out.println("Correct! " + (10 - bodyParts.size()) + " correct guess" + ((10 - bodyParts.size()) != 1 ? "es" : ""));
        }
    }
    System.out.println("Done. You have found them all after " + totalGuesses + " guesses.");
    sc.close();

Кроме того, это чувствительно к регистру. Он не найдет Arm при наборе arm. И если вам нужно количество всех догадок, вы можете просто добавить int перед циклом и увеличить его внутри.

Результат моего примера:

Начни гадать ...
рука
Нет.
Arm
Правильный! 1 правильное предположение
Arm
Нет.
Ухо
Правильный! 2 правильных догадки
Eye
Правильный! 3 правильных догадки

(...)

Ребро
Правильный! 9 правильных догадок
Toe
Правильный! 10 правильных догадок
Готово. Вы нашли их всех после 12 догадок.

0 голосов
/ 02 ноября 2018

Есть много способов сделать это. Следующее, не самый лучший или самый эффективный, но он должен работать ... Прежде всего, вы должны поместить свой «официальный» список в структуру, например массив:

private static String[] offList={Arm, Ear, Eye, Gum, Hip, Jaw, Leg, Lip, Rib, Toe};

Теперь вам нужно написать метод, который может найти мир в этом «offList», например:

private static boolean find(String word){
    for( int i=0; i<offList.length; i++){
        if(word.equals(offList[i])) //if "word" is in offList
            return true;
    }
    return false;
}

Теперь давайте создадим этот угадайку с графическим интерфейсом:

public static void main(String[] args){
    LinkedList<String> guessed=new LinkedList<>();
    String s;
    Scanner input = new Scanner(System.in);
    while(guessed.size()<offList.length){
        System.out.println("Guessed= "+guessed.toString()); //you have to change it, if you want a better look
        System.out.print("Try:");
        s=input.nextLine();
        /*Here we ask to the user the same thing, unless the guessed list 
        contains all the words of offList.
        Every time we print the guessed worlds list*/ 
        if(find(s)){
            System.out.println("This world is in offList!");
            if(!guessed.contains(s)) //the world is counted only one time!
                guessed.add(s);
        }else
            System.out.println("Sorry...");
    }
    System.out.println("The complete list is "+guessed.toString());

}

Если вы хотите показать эту игру в окне, вам нужно изучить некоторые классы Java Swing.

РЕДАКТИРОВАТЬ: я публикую свой ответ перед редактированием основного сообщения. Прежде всего вы должны понять преимущества и использование Коллекций ... Когда вы знаете, например, все методы LinkedList, это назначение выглядит как шутка! ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...