Выполнение поиска таблицы периодов c в java (целых числах) - PullRequest
0 голосов
/ 03 мая 2020

Целью является создание периодической c таблицы элементов поисковой системы. Пользователю задают вопросы, чтобы сузить результаты или, если пользователь знает имя элемента, в который он только что был введен. Как только он введен или элемент найден, он собирается предоставить информацию об элементе. У меня есть только несколько деталей и несколько элементов, чтобы код работал, и будет добавлено больше элементов и деталей, таких как структура и атом c вес.

Всякий раз, когда найден результат, он не дает Информация это просто дает пустой экран. Я думал поместить его в класс как toString, а затем достаточно было вызвать его в нижней части главной страницы, но я не могу понять, чего мне не хватает. Это похоже на простую системную команду печати, но она тоже не работает.

Любая помощь очень ценится.

import java.util.ArrayList;
import javax.swing.*;

public class Main {

public static void main(String args[]) {

    ArrayList<Element> e = new ArrayList<Element>();
    String choice, element = "", searchBy, symbol, chemGroupBlock, list = "", str = "";

    e.add(new Element("Hydrogen", "Nonmetal", "H", 1));
    e.add(new Element("Helium", "Nobel Gas", "He", 2));
    e.add(new Element("Lithium", "Alkali Metal", "Li", 3));

    choice = JOptionPane.showInputDialog(null,
            "Do you know the name of the element you're looking for?"
                    + "(Yes/No)", "Welcome to the Chem Table!", 3);

    if (choice.equalsIgnoreCase("yes")) {
        element = JOptionPane.showInputDialog(null,
                "Enter the name of the Element.. ",
                "Welcome to the Chem Table!", JOptionPane.PLAIN_MESSAGE);
    }else if (choice.equalsIgnoreCase("no")) {
        searchBy = JOptionPane.showInputDialog(null,
                "Search by: 'chemical group block' or 'symbol'?", "Welcome to the Chem Table", 3);

        if (searchBy.equalsIgnoreCase("chemGroupBlock")) {
            chemGroupBlock = JOptionPane.showInputDialog(null,
                    "Enter Chemical Group Block (Nonmetal/Nobel Gases/Alkalies)",
                    "Welcome to The Chem Table", JOptionPane.PLAIN_MESSAGE);
            for (int i = 0; i < e.size(); i++){
                if (e.get(i).getchemGroupBlock().equals(chemGroupBlock)){
                    list = list + e.get(i).getName() + "\n";
                }
            }

            element = JOptionPane.showInputDialog(null, list,
                    JOptionPane.PLAIN_MESSAGE);

        } else if (searchBy.equalsIgnoreCase("symbol")) {
            symbol = JOptionPane.showInputDialog(null,
                    "Enter the element symbol:(He/NaCl/Xe)",
                    "Welcome to the Chem Table",
                    JOptionPane.PLAIN_MESSAGE);
            for (int i = 0; i < e.size(); i++) {
                if (e.get(i).getSymbol().equals(symbol)) {
                    list = list + e.get(i).getName() + "\n";
                }
            }
            element = JOptionPane.showInputDialog(null, list,
                    JOptionPane.PLAIN_MESSAGE);

        }
    }
    for (int i = 0; i < e.size(); i++) {
        if (e.get(i).getName().equals(element)) {
            str = e.get(i).toString();
        }
    }

    JOptionPane.showMessageDialog(null, str, "Element Results", 1);


 }
}

Вот класс для элементов

public class Element {
private String name;
private String chemGroupBlock;
private String symbol;
private int atomicNumber;



public Element(String name, String chemGroupBlock, String symbol, int atomicNumber) {

    this.name = name;
    this.chemGroupBlock = chemGroupBlock;
    this.symbol = symbol;
    this.atomicNumber = atomicNumber;
}

public String getName(){
    return name;
}

public String getchemGroupBlock(){
    return chemGroupBlock;
}

public String getSymbol(){

    return symbol;
}

public int getatomicNumber(){
    return atomicNumber;
}

public String toString() {
    return "Element: " + name + "\nChemical Group Block: " + chemGroupBlock + "\nSymbol: " + symbol + "\nAtomic Number" + atomicNumber;
   }
}

Ответы [ 2 ]

1 голос
/ 03 мая 2020

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

Что касается поиска по символу или химической группе, существует избыточный диалог ввода, который печатает -1 в поле ввода (это значение JOptionPane.PLAIN_MESSAGE):

element = JOptionPane.showInputDialog(null, list, JOptionPane.PLAIN_MESSAGE);

Было бы лучше использовать «диалоги параметров», в которых пользователь может просто нажать кнопку, чтобы выбрать параметр, а не вводить его.

Далее при поиске по символу вы предлагаете опции, недоступные в ваших данных (например, NaCl и Xe).

Итак, для решения этих проблем вы можете обновить код следующим образом:

int result = JOptionPane.showConfirmDialog(null,
                "Do you know the name of the element you're looking for?", 
                "Welcome to the Chem Table!", JOptionPane.YES_NO_CANCEL_OPTION);

if (result == JOptionPane.YES_OPTION) {
    element = JOptionPane.showInputDialog(
        null, "Enter the name of the Element.. ",
        "Welcome to the Chem Table!", JOptionPane.PLAIN_MESSAGE);
} else if (result == JOptionPane.NO_OPTION) {
    String[] byOptions = {"chemical group block",  "symbol"};
    result = JOptionPane.showOptionDialog(
                null, 
                "Search by: 'chemical group block' or 'symbol'?",
                "Welcome to the Chem Table", 
                JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
                null, byOptions, byOptions[0]);

    if (result == 0) {
        String[] byGroup = {"Nonmetal", "Nobel Gases", "Alkalies"};
        result = JOptionPane.showOptionDialog(
                    null,
                    "Select Chemical Group", 
                    "Welcome to The Chem Table",
                    JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
                    null, byGroup, byGroup[0]);
        for (Element el : e) {
            if (el.getchemGroupBlock().equalsIgnoreCase(byGroup[result])) {
                element = el.getName();
                break;
            }
        }
    } else { // search by symbol
        symbol = JOptionPane.showInputDialog(
                    null, "Enter the element symbol:(H/He/Li)",
                    "Welcome to the Chem Table",
                    JOptionPane.PLAIN_MESSAGE);
        for (Element el : e) {
            if (el.getSymbol().equalsIgnoreCase(symbol)) {
                element = el.getName();
                break;
            }
        }
        if (element.isEmpty()) {
            JOptionPane.showMessageDialog(
                null, "Symbol" + symbol + " not found!", "Not found!", JOptionPane.WARNING_MESSAGE);
            return;
        }
    }
}
1 голос
/ 03 мая 2020

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

if (e.get(i).getName().equals(element))

Вы ввели точное регистрозависимое имя элемента? Например, «hyrdogen» не будет найден, но «Hydrogen» будет работать нормально.

Вы должны изменить это условие на:

if(e.get(i).getName().equalsIgnoreCase(element))

Есть и другие подобные проблемы в других частях кода. Я предлагаю вам сделать полный обзор вашей логики c. Обратите особое внимание на то, когда вы звоните equals и должен ли он быть equalsIgnoreCase

...