2016-07-06 52 views
1

我想在java中製作一個週期表程序。代碼非常龐大,所以我沒有把整個事情放在這裏。這是我使用的存儲和打印每個元素的值類: -使用String來調用類的函數?

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); 
    } 
} 

在主類中我做了這個類和使用setdetails()這樣每個元素的硬編碼信息的118個對象:

elements H=new elements(); 
H.setdetails(1, "Hydrogen", 1.008); 

現在我要求用戶輸入如H,他,李等元素符號搜索它的信息,但我認爲你必須使用一個實際的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();不起作用,即使symH。現在可以做什麼?

+4

你正在尋找一個地圖''數據結構,作爲一個HashMap的''

+0

不要定義變量118執行。使用「地圖」。 – ajb

+0

我是新來的,我對地圖一無所知:/ –

回答

1

在Java中,Map將一個對象(一個關鍵字)與另一個(一個值)關聯(或映射)。 Java地圖有不同的實現,但由於您是新手,只需使用HashMap實現。當您不必在多個線程中訪問HashMap時,這是一個很好的通用目的實現。

在你的情況下,一個簡單的方法是編寫一個函數來創建地圖,用你的元素類填充它,然後返回完全填充的地圖。之後,您可以根據元素的符號執行查找。

例如(請注意,我已經根據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什麼類型的鍵和值應該是。在這段代碼中,我們將元素符號(一個字符串)與元素類相關聯,所以我們需要將它放在角度大括號中。例如

Map<String, Element> elements; 

請注意,函數的返回類型與變量elements的類型匹配。

對於這個例子,還有另外兩件事情與你應該注意的問題中的代碼不同。

首先,它使用構造函數來填充元素。構造函數就像一個初始化函數,它的名稱與您的類相同,並且可以與new運算符一起使用。

其次,它定義了一個toString()方法。 A 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; 
    } 
} 
+0

您能否爲我提供基本聲明hashmap的語法?因爲在這個工作例子中,我不太明白我該如何聲明和使用它 –

+0

它會是這樣的:Map elements = new HashMap <>();',這是第一行上面的'getElements()'函數。 – Bill