gpt4 book ai didi

java - 在针对枚举 Java 中的每个项目检查输入后如何跳出循环?

转载 作者:行者123 更新时间:2023-12-01 17:47:26 27 4
gpt4 key购买 nike

我正在尝试制作一个程序,允许用户输入元素周期表中元素的名称或符号,然后输出有关该元素的一些数据。到目前为止,我已经设法让用户能够输入名称或符号并正确输出,但是如果用户输入错误,则代码不会输出任何内容,并且将停止接受以下输入一个符号,并且只接受名称的输入。我想知道如何能够跳出循环并告诉用户,只有在针对枚举中的每个项目检查输入后,他们的输入才无效,因为我当前的解决方案不起作用。我是 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) {

int counter = 0;
System.out.println("Enter the name or symbol of an element in the periodic table. ");
outer:
do {
Scanner reader = new Scanner(System.in);
String input = reader.nextLine().trim();
for (Element sy : Element.values()) {
if (sy.symbol.equalsIgnoreCase(input)) {
System.out.println("Element: " + sy + " (" + sy.symbol + ")" + "\nGroup: " + sy.group + "\nAtomic Mass: " + sy.weight);
reader.close();
break outer;
} else {
try {
cName = Element.valueOf(input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase());
System.out.println("Element: " + cName + " (" + cName.symbol + ")" + "\nGroup: " + cName.group + "\nAtomic Mass: " + cName.weight);
reader.close();
break outer;
} catch(IllegalArgumentException e) {
if(counter > Element.values().length) {
System.out.println("That name or symbol is not valid. Please try again. ");
continue outer;
} else {
counter++;
continue;
}
}
}
}
} while (true);
}
}

最佳答案

我会避免在循环中使用valueOf方法。相反,您可以迭代元素并为每个元素检查其名称(使用 name 方法)及其符号。

Scanner reader = new Scanner(System.in);
outer: while (true) {
System.out.println("Enter the name or symbol of an element in the periodic table. ");
String input = reader.nextLine().trim();
for (Element sy : Element.values()) {
if (sy.symbol.equalsIgnoreCase(input) || sy.name().equalsIgnoreCase(input)) {
System.out.println("Element: " + sy + " (" + sy.symbol + ")" + "\nGroup: " + sy.group + "\nAtomic Mass: " + sy.weight);
break outer;
}
}
System.out.println("No such element found. ");
}
reader.close(); // this might be a bad idea

我还会避免关闭reader,因为这也会关闭System.in,并且您将无法读取更多输入。

关于java - 在针对枚举 Java 中的每个项目检查输入后如何跳出循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53574733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com