Próbuję dokonać generatora znaków DND, a do tego, że muszę mieć listę statystyk, które są edytowalne przez inne metody, więc próbuję dodać go na poziomie klasy. Mój bieżący kod to:

public class CharacterCreator extends Application
{
    ArrayList<String> stats = new ArrayList<String>();

        stats.add("STR");
        stats.add("DEX");
        stats.add("CON");
        stats.add("INT");
        stats.add("WIS");
        stats.add("CHA");

public void start(Stage primaryStage)
{

Ale kiedy próbuję go uruchomić, otrzymuję błąd "Identyfikator oczekiwany" na każdej linii "Dodaj".

1
Marcus Taylor 2 czerwiec 2018, 02:19

5 odpowiedzi

Najlepsza odpowiedź

Możesz zainicjować ArrayList w ten sposób:

ArrayList<String> stats = new ArrayList<>(Arrays.asList("STR", "DEX"));

Jak pokazano w Ta odpowiedź. Lub po prostu umieść dodatkowe połączenia wewnątrz metody lub konstruktora w ten sposób:

ArrayList<String> stats = new ArrayList<>();

// Adding to ArrayList inside a constructor
public CharacterCreator()
{
    stats.add("STR");
    stats.add("DEX");
}
6
0xCursor 4 październik 2018, 14:28

Nie możesz mieć takich znanych stwierdzeń w ciele klasowej. Musisz wypełnić tablicę w bloku metody, konstruktora lub inicjalizacji:

public class CharacterCreator extends Application{
    ArrayList<String> stats;

    public CharacterCreator() {
         stats = new ArrayList<String>();
         stats.add("STR");
         stats.add("DEX");
         stats.add("CON");
         stats.add("INT");
         stats.add("WIS");
         stats.add("CHA");
    }
}

Jeśli chcesz, aby statystyki były zdefiniowane na poziomie klasy zamiast poziomu obiektu, musisz dodać statyczne blokowanie inicjalizacji:

public class CharacterCreator extends Application{
    static ArrayList<String> stats;

    static {
         stats = new ArrayList<String>();
         stats.add("STR");
         stats.add("DEX");
         stats.add("CON");
         stats.add("INT");
         stats.add("WIS");
         stats.add("CHA");
    }
}
3
Robby Cornelissen 2 czerwiec 2018, 00:31

A co z inicjowaniem bloku?

public class CharacterCreator extends Application {
    public ArrayList<String> stats = new ArrayList<String>();
    {
       stats.add("STR");
       stats.add("DEX");
       stats.add("CON");
       stats.add("INT");
       stats.add("WIS");
       stats.add("CHA");
    }
}
2
Peteef 1 czerwiec 2018, 23:32

Jak @Shmosel właśnie powiedział, że nie możesz uruchomić oświadczeń poza metodą. Możesz utworzyć metodę inicjatora i wywołać go do konstruktora lub przenieś instrukcje do konstruktora. Metoda Add jest uważana za nieznaną i tak nie można rozwiązać

0
Gratien Asimbahwe 1 czerwiec 2018, 23:26

Nie możesz nazwać metody add() podczas deklaracji klasy. Użyj bloku lub metody połączeń static w konstruktorze.

public class CharacterCreator extends Application {

    ArrayList<String> stats = new ArrayList<String>();

    public CharacterCreator() {
        stats.add("STR");
        stats.add("DEX");
        stats.add("CON");
        stats.add("INT");
        stats.add("WIS");
        stats.add("CHA");
    }

    public void start(Stage primaryStage) {

    }
}
0
karakale 1 czerwiec 2018, 23:26