2017-03-16 16 views
0

いくつか質問があります。私は要素オブジェクトの配列を検索するメソッドを作成しています(各要素オブジェクトは[atomicNumber省略名atomicWeight]で初期化されています)。私はまた、 '要素への参照'を返す必要があります - これを行う方法が正確にはわかりません。ユーザーがmainに略語を入力すると、配列上でfindAbbreviationメソッドが使用されます。 toStringメソッドは、各データ型をフォーマットしてStringとして返します。配列全体の任意のオブジェクトの略語の位置を検索するにはどうすればよいですか?そして、その '要素'オブジェクトへの参照をどのように返すのですか?文字列の配列内の特定の単語の位置を検索するには

public class PeriodicTable { 

    private final int MAX_ELEMENTS = 200; 
    private PeriodicElement[] table; 
    private int actualSize; 

    public PeriodicTable() throws IOException{ 
     table = new PeriodicElement[MAX_ELEMENTS]; 

     Scanner input = new Scanner(new File("file name here")); 
     int index = 0; 
     while(input.hasNext() && index < MAX_ELEMENTS) { 
      int aN = input.nextInt(); 
      String abbr = input.next(); 
      String name = input.next(); 
      double aW = input.nextDouble(); 
      table[index] = new PeriodicElement(aN, abbr, name, aW); 
      index++; 

     } 
     input.close(); 
     actualSize = index; 
    } 

    public String findAbbreviation(String abbreviationP){ 
     boolean found = false; 
     int index = 0; 
     while(found && index < MAX_ELEMENTS){ 
      if (table[index] = table[abbreviationP]){ 
       found = true; 

       return table[index].toString; 
      }    
      index++;  
     } 
     return null; 
    } 
} 

class PeriodicElement { 
    private int atomicNumber; 
    private String abbreviation, name; 
    private double atomicWeight; 

    public PeriodicElement(int atomicNumberP, 
      String abbreviationP, String nameP, 
      double atomicWeightP){ 
     atomicNumber = atomicNumberP; 
     abbreviation = abbreviationP; 
     name = nameP; 
     atomicWeight = atomicWeightP; 
    } 
+0

public String getAbbreviation() { return abbreviation; } 

第二に、あなたは、この新しいゲッターを利用するために、あなたのfindAbbreviation方法を更新したいと思います?あなたの状態は間違っています。 –

+0

インデックスに文字列を使用しようとすると、配列から要素を取得することもできません。どこからこのメソッドを呼び出していますか?あなたはそれを探している間、ループで文字列を見つけて、索引を追跡しなければならないでしょう。 abbreviationPの索引が必要な場合は、forループを使用して、配列が見つかるまで検索する必要があります。その瞬間にあなたはあなたがそれを見つけたインデックスを持っています。 –

答えて

0

まず、要素の配列またはコレクションが必要です。これは、現在作成しているクラスのインスタンス変数で、 'findAbbreviation'を含みます。

第2に、「Element」は単にElementクラスのインスタンス変数として「abbreviation」のような属性変数を持つことができます。リスト上のfindAbbreviationを呼び出し、その略称を省略インスタンス変数。実際の名前を検索して省略語を検索することはできません。たとえば、Goldの略語はAUです。

エレメントのリストとエレメントを定義するクラスの表示方法を教えてください。

あなたは、単に(あなたの現在のコードが示すように)要素の略語のリストを探しているなら、あなただけ行うには、あなたの現在のコードを修正する必要があり、正しく比較に等しい:

への答えを更新
public String findAbbreviation(String abbreviationP){ 
     boolean found = false; 
     int index = 0; 
     while(!found && index < MAX_ELEMENTS){ //this should be !found instead of found 
      if (table[index].equals(abbreviationP)) { // you previously had an assignment statement in this if 
       found = true; 

       return table[index].toString; 
      }    
      index++;  
     } 
    return null; 
} 

まず、PeriodicElementクラスにメソッドを用意して、インスタンス変数 "abbreviation"を取得する必要があります。

これは、標準の「ゲッター」である:あなたが今までこのループになっているどのように

public PeriodicElement findAbbreviation(String abbreviationP){ 
     boolean found = false; 
     int index = 0; 
     while(!found && index < MAX_ELEMENTS){ //this should be !found instead of found 
      if (table[index].getAbbreviation().equals(abbreviationP)) { // you previously had an assignment statement in this if 
       found = true; 

       return table[index]; //This will return the object at the index where it was found. 
             // Notice I also changed the return type on your function. 
      }    
      index++;  
     } 
    return null; 
} 
+0

もっとコードを追加しました。要素が見つからない場合はnullを返します。しかし、私は各要素を印刷しています。 'return null'ですか? (それは今のところ)Javaで受け入れられますか? – Tenze

+0

はい、nullオブジェクトを返すことは可能です。戻り値の型はStringなので、空のStringまたは ""を返すのがやや普通です。私は以前の答えの下にコードを更新しました。 – user681574

+0

実際には、StringではなくPeriodicElementオブジェクトを返すように思えます。意味のある結果を得るために、要素の "String"バージョンを提供する場合は、Objectクラスの "toString"メソッドをオーバーライドする必要があります。 – user681574

関連する問題