我正在尝试在java中创建一个元素周期表程序。代码非常庞大,所以我不是把整个事情放在这里。这是我用来存储和打印每个元素的值的类: -
php artisan config:cache
在主要课程中,我使用class elements
{
int atomicno;
String name;
double weight;
void setdetails(int a, String n, double w)
{
atomicno=a;
name=n;
weight=w;
}
void showdetails()
{
System.out.println("Atomic no.=" +atomicno);
System.out.println("Name=" +name);
System.out.println("Weight=" +weight);
}
}
制作了这个类的118个对象和每个元素的硬编码信息,如下所示:
setdetails()
现在我要求用户输入像H,He,Li等元素符号来搜索其信息,但我认为你必须使用实际的elements H=new elements();
H.setdetails(1, "Hydrogen", 1.008);
来调用object
函数与showdetails()
类似,但我仍尝试使用用户输入的H.showdetails()
:
String
并且毫无疑问System.out.print("Enter the correct exact symbol to search:");
String sym=sc2.nextLine();
for(i=0; i<118; i++)
{
if(s[i].equals(sym))
{
System.out.println();
sym.showdetails();
System.out.println();
}
}
即使对象的名称和用户输入的符号相同也不起作用。所以现在,如果我sym.showdetails();
它有效,但即使H.showdetails();
为sym.showdetails();
,sym
也不起作用。现在该怎么办?
答案 0 :(得分:1)
在Java中,Map将一个对象(一个键)与另一个(一个键)关联(或映射)。 Java中有不同的Maps实现,但由于你是新的,只需使用HashMap实现。当您不必在多个线程中访问HashMap时,这是一个很好的通用实现。
在您的情况下,一种简单的方法是编写一个创建地图的函数,用元素类填充它,然后返回完全填充的地图。之后,您可以根据元素的符号执行查找。
e.g。 (请注意,我已根据Java风格将您的班级名称设置为大写字母(在罗马时)!)
// add these lines to top of file
import java.util.Map;
import java.util.HashMap;
// example population function
public Map<String, Element> getElements() {
Map<String, Element> elements = new HashMap<>();
elements.put("H", new Element(1, "Hydrogen", 1.008));
// etc...
return elements;
}
// Getting your map of data and using it.
Map<String, Element> elements = getElements();
System.out.println(elements.get("H"));
当您重新声明地图时,请记住另一件事。您应该告诉Java键和值应该是什么类型。在这段代码中,我们将元素符号(一个字符串)与您的元素类相关联,因此我们需要将它放在角括号中。 e.g。
Map<String, Element> elements;
请注意,函数的返回类型与变量elements
的类型匹配。
此示例还有两个与您应该注意的问题中的代码不同的内容。
首先,它使用构造函数来填充元素。构造函数类似于初始化函数,与您的类同名,并且可以与new
运算符一起使用。
其次,它定义了toString()
方法。 toString()
方法返回Java中对象的字符串表示形式。这比从类中简单打印更好,因为它可以在比从方法打印更多的情况下使用。
这是代码。
public class Element {
private int atomicNumber;
private String name;
private double weight;
public Element (int a, String n, double w) {
atomicNumber = a;
name = n;
weight = w;
}
public String toString() {
return "Atomic number = " + atomicNumber + ", " +
"Name = " + name + "," +
"Weight = " + weight;
}
}