2016-04-13 8 views
0

In einer Klasse, habe ich eine Methode haben:Ich <Identifier> immer erwartet Fehler

public void initalizeElements() 
{ 
//does some stuff 
} 

Also dann in einer anderen Klasse versuche ich:

Molecules mol = new Molecules(); 

mol.initalizeElements(); 

und ich erhalte eine Fehlermeldung in der zweiten Zeile sagen "erwartet".

Ich fühle mich wie das ist wirklich einfach und ich schaue nur über etwas einfaches, aber ich kann es immer noch nicht herausfinden. Und bevor jemand es sagt, ja, ich habe mir Hunderte andere Fragen angesehen, die dieselbe Frage haben wie ich. Aber keiner von ihnen schien mir zu helfen.

Voll Code:

package mymolecules; 
public class Molecules 
{ 
     public String[] elements = new String[35]; 
     private int lazyCounter = 0; 

     public void initalizeElements() 
     { 
     elements[lazyCounter] = "H"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "He"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "Li"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "Be"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "B"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "C"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "N"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "O"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "F"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "Ne"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "Na"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "Mg"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "Al"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "Si"; 
     lazyCounter += 1; 
     elements[lazyCounter] = "P"; 
     .... 
     .... 
     //on so on for the hole periodic table 
     } 
} 

und

package mymolecules; 
public class Parser 
{ 
    private String conString = ""; 
    private int conInt = 0; 
    private int indexer = 0; 

    private int lazyCounter = 0; 

    private String sortList = ""; 
    private int sortCount = 0; 

    Molecules mol = new Molecules(); 

    mol.initalizeElements(); 


    private String formula; 
    public Parser(String Formula) 
    { 
     this.formula = Formula; 
    } 
    public void Sort() 
    { 
    while (lazyCounter > 34) 
    { 
     try { 
     if (formula.contains(mol.elements[lazyCounter])) //Does the String contain the letter "H" 
     { 
      indexer = formula.indexOf(mol.elements[lazyCounter]); //indexer = where in the String "H" is located. 
      if (formula.substring(indexer+1,indexer+2).matches("e")) //if "e" is located right after "H" 
        { 
         //System.out.println("Skip"); //Skipping because we'll deal with it later 
        } 
      else 
      { 
       if (formula.substring(indexer+1,indexer+2).matches("[1-999].*")) // if any number is located after H 
       { 
        conString = formula.substring(indexer+1,indexer+2); //Take the number after "H" and put it in conString 
        conInt = Integer.parseInt(conString); //conInt = ConString as an Integer 
        System.out.println("H"+conInt); //Print out "H" and the number 
       } 
       else 
       { 
        System.out.println(mol.elements[lazyCounter]); 
       } 
      } 
     } 
     } 
     catch (java.lang.StringIndexOutOfBoundsException e) //Catches the error from earlier 
     { 
      System.out.println("Whew caught an error!"); //rest of this is self explanitory. 
      System.out.println(mol.elements[lazyCounter]); 
     } 
     lazyCounter += 1; 
    } 
    } 


} 
+0

Dieser Ausschnitt sieht gut aus. Kannst du bitte etwas mehr Kontext teilen? – Mureinik

+0

ist 'mol.initalisizeElements();' in einer Methode? – Reimeus

+0

@Mureinik sure 1 sec – KiwiNinja

Antwort

0

In der Klasse Parser Sie haben diese 2 Zeilen

Molecules mol = new Molecules(); 
mol.initalizeElements(); 

außerhalb eines Verfahrens, das normalerweise in einem gewissen Konstruktor passieren muss , bewegen Sie es darin ...

es ist eine schlechte Praxis Objekte wie die init ...

versuchen, etwas elegantere wie:

public class Parser { 
    private String conString = ""; 
    private int conInt = 0; 
    private int indexer = 0; 

    private int lazyCounter = 0; 

    private String sortList = ""; 
    private int sortCount = 0; 
    private Molecules mol; 
    private String formula; 

    public Parser(String Formula){ 
     this.formula = Formula; 
     mol = new Molecules(); 
     mol.initalizeElements(); 
    } 
0

Sie können zur Definition von Variablen nicht starten Methoden in dem Abschnitt der Klasse aufrufen. Bewegen Sie diese zu Ihrem Konstruktor:

mol = new Molecules(); 
mol.initalizeElements(); 

halten nur die Deklaration von Mol in dem Abschnitt für Variablen definieren, wo es geht:

private Molecules mol; 
0

Auf dieser Ebene nur Feld/Methode/Baumeister/Klassendeklarationen/Initialisierungsblöcke sind erlaubt.

Molecules mol = new Molecules(); 
{ 
    mol.initalizeElements(); 
} 

Das obige wäre ein Initialisierungsblock. Seine Verwendung dient hauptsächlich zum Ausfüllen einer Karte. Üblicher wäre es, den Methodenaufruf im Konstruktor zu platzieren.

public Parser(String Formula) { 
    mol.initalizeElements(); 
}