Как использовать значение строки в перечислении в качестве входных данных для вывода остальных данных для этого элемента перечисления в Java? - PullRequest
0 голосов
/ 01 декабря 2018

Я не мог придумать, как сформулировать вопрос, но у меня есть довольно простая программа, которая попросит пользователя ввести элемент из периодической таблицы, а затем выведет символ, группу и атомную массу этого элемента.,В настоящее время он будет принимать только ввод имени элемента, и я пытаюсь сделать так, чтобы он также принимал ввод символа, но я не знаю, как это сделать.Например, в данный момент, если пользователь вводит «Железо», программа будет выводить корректно, но если они вводят «Fe», это не будет работать.Я хочу, чтобы ввод "Fe" также работал.Я очень новичок в Java, поэтому я хотел бы получить простое объяснение того, как и почему.

import java.util.Scanner;
public class PeriodicTable {

    public enum Element {
        Hydrogen("H", "Nonmetal", "1.008"),
        Helium("He", "Noble Gas", "4.003"),
        Lithium("Li", "Alkali Metal", "6.941"),
        Beryllium("Be", "Alkaline Earth", "9.012"),
        Boron("B", "Semimetal", "10.811"),
        Carbon("C", "Nonmetal", "12.011"),
        //The rest of the periodic table is here, I just removed it for the sake of this post.

        private String symbol;
        private String group;
        private String weight;

        private Element(String symbol, String group, String weight) {
            this.symbol = symbol;
            this.group = group;
            this.weight = weight;
        }
    }

    static Element cName = null;
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        System.out.println("Enter the name of an element in the periodic table. ");
        do {
            String input = reader.nextLine();
            try {
                cName = Element.valueOf(input.trim().substring(0, 1).toUpperCase() + input.trim().substring(1).toLowerCase());
            } catch(IllegalArgumentException e) {
                System.out.println("That name is not valid. Please try again. ");
                continue;
            }
            System.out.println("Element: " + cName + " (" + cName.symbol + ")" + "\nGroup: " + cName.group + "\nAtomic Mass: " + cName.weight);
            reader.close();
            break;
        } while (true);
    }
}

1 Ответ

0 голосов
/ 01 декабря 2018

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

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    boolean found = false;
    do {
        System.out.println("Enter the symbol of an element in the periodic table. ");
        String input = reader.nextLine().trim();

        for (Element e : Element.values()) {
            if (e.symbol.equals(input)) {
                found = true;
                System.out.println("Element: " + e + " (" + e.symbol + ")" + "\nGroup: " + e.group + "\nAtomic Mass: " + e.weight);
            }
        }
        if (!found)
            System.out.println("That symbol is not valid. Please try again. ");
    } while (!found);
    reader.close();
}
...