使用String来调用类的函数?

时间:2016-07-06 05:16:32

标签: java

我正在尝试在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也不起作用。现在该怎么办?

1 个答案:

答案 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;
    }
}