2016-04-13 5 views
0

В одном классе, у меня есть метод:Я получаю <Identifier> ожидается ошибка

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

Итак, в другом классе я стараюсь:

Molecules mol = new Molecules(); 

mol.initalizeElements(); 

и я получаю сообщение об ошибке во второй строке говоря «ожидаемый».

Я чувствую, что это действительно легко, и я просто смотрю на что-то простое, но я все еще не могу понять это. И прежде чем кто-то скажет это, я посмотрел на сотни других вопросов, которые имеют тот же вопрос, что и я. Но никто из них не помог мне.

Полный код:

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

и

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

Этот снипп хорошо выглядит. Можете ли вы рассказать о другом контексте? – Mureinik

+0

является 'mol.initalizeElements();' в методе? – Reimeus

+0

@Mureinik sure 1 sec – KiwiNinja

ответ

0

В классе Parser у вас есть эти 2 строки

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

вне метода, это обычно должно произойти в какой-то конструктор , переместите его внутрь ...

это плохая практика, чтобы инициализировать объекты, как ...

попробовать что-то более изящное, как:

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

Вы не можете начать вызов методов в секции класса, используемого для определения переменных. Переместить их в конструктор:

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

Хранить только декларацию молит в разделе для определения переменных, где он идет:

private Molecules mol; 
0

На этом уровне только объявления поля/метода/конструктора/класса/Разрешены блоки инициализатора.

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

Вышеупомянутый элемент будет инициализатором. Его использование в основном для заполнения карты. Более обычным было бы разместить вызов метода в конструкторе.

public Parser(String Formula) { 
    mol.initalizeElements(); 
} 
Смежные вопросы