2017-03-16 4 views
0

Ein paar Fragen. Ich erstelle eine Methode, die ein Array von Elementobjekten durchsucht (wobei jedes Elementobjekt mit [atomicNumber Abkürzung name atomicWeight] initialisiert wurde). Ich muss auch "einen Verweis auf das Element" zurückgeben - nicht genau, wie dies zu tun ist. Der Benutzer gibt eine Abkürzung in main ein, dann wird die Methode findAbbreviation für ein Array verwendet. Die Methode toString formatiert und gibt jeden Datentyp als String zurück. Wie kann ich nach der Abkürzungsposition in einem gegebenen Objekt für das gesamte Array suchen? Und wie gebe ich einen Verweis auf dieses 'Element' -Objekt zurück.So suchen Sie nach bestimmten Wortposition im Array von Strings

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

Wie werden Sie jemals in dieser Schleife bekommen ? Ihr Zustand beginnt falsch. –

+0

Sie können auch kein Element aus einem Array abrufen, indem Sie versuchen, eine Zeichenfolge für einen Index zu verwenden. Woher nennst du diese Methode? Sie müssen die Zeichenfolge mit einer Schleife suchen und den Index verfolgen, während Sie danach suchen. Wenn Sie den Index für AbkürzungP wollen, müssen Sie eine for-Schleife verwenden und das Array durchsuchen, bis Sie es finden. In diesem Moment haben Sie den Index, wo Sie ihn gefunden haben. –

Antwort

0

Zuerst würden Sie ein Array oder eine Sammlung von Elementen benötigen. Dies könnte eine Instanzvariable der Klasse sein, die Sie gerade schreiben und die 'findAbbreviation' enthält.

Zweitens könnte ein "Element" einfach eine Attributvariable wie "Abkürzung" als Instanzvariable der Element-Klasse haben, und Sie könnten das findAbbreviation einfach auf der Liste aufrufen und gezielt nach dieser Abkürzung suchen Abkürzung Instanzvariable. Es ist unwahrscheinlich, dass Sie nach dem tatsächlichen Namen suchen können, um die Abkürzung zu finden, denn zum Beispiel: Golds "Abkürzung" ist AU.

Könnten Sie zeigen, wie Ihre Elementeliste definiert ist, sowie die Klasse, die die Elemente definiert?

Wenn Sie einfach durch eine Liste der Abkürzungen der Elemente (wie der aktuelle Code schon sagt) suchen, können Sie können Sie den aktuellen Code haben zu beheben richtig ein Gleichheitsvergleich zu tun:

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

Aktualisierung Antwort auf reflect update zu der Frage:

Zuerst müssen Sie eine Methode in der PeriodicElement-Klasse bereitstellen, um die Instanzvariable "Abkürzung" abzurufen.

Dies ist ein Standard "Getter":

public String getAbbreviation() { 
    return abbreviation; 
} 

Zweitens Sie wollen Ihre findAbbreviation Methode, um diesen neuen Getter zu verwenden:

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

Ich habe mehr Code hinzugefügt. Ich soll 'null' zurückgeben, wenn das Element nicht gefunden wird. Aber ich drucke jedes Element aus. Ist 'Rückkehr null'; (wie es jetzt ist) akzeptabel in Java? – Tenze

+0

Ja, das Zurückgeben eines Nullobjekts ist akzeptabel. Da Ihr Rückgabetyp eine Zeichenfolge ist, ist es etwas konventioneller, eine leere Zeichenfolge oder "" zurückzugeben. Ich habe den Code unter meiner vorherigen Antwort aktualisiert. – user681574

+0

Es klingt, als ob Sie das PeriodicElement-Objekt lieber als einen String zurückgeben möchten. Wenn Sie eine "String" -Version Ihres Elements bereitstellen möchten, müssen Sie die "toString" -Methode aus der Object-Klasse überschreiben, um ein aussagekräftiges Ergebnis zu erhalten. – user681574

Verwandte Themen