2

Java でを作成しようとしたときに問題が発生しましたArrayListが、具体的にはそれを作成しようとしたときに発生しadd()ました。行に構文エラーが表示されますpeople.add(joe); ...

Error: misplaced construct: VariableDeclaratorId expected after this token.
    at people.add(joe);
                  ^

私の目的では、配列よりも a の方が優れていると理解しているArrayListので、私の質問は、そうではない場合、構文のどこが間違っているのでしょうか?

これは私のコードです...

import java.util.ArrayList;

public class Person {
    static String name;
    static double age;
    static double height;
    static double weight;

    Person(String name, double age, double height, double weight){
        Person.name = name;
        Person.age = age;
        Person.height = height;
        Person.weight = weight;
    }

    Person joe = new Person("Joe", 30, 70, 180);
    ArrayList<Person> people = new ArrayList<Person>();
    people.add(joe);
}
4

7 に答える 7

7
static String name;      
static double age;
static double height;
static double weight;

これらの変数が静的として定義されているのはなぜですか?

Personクラスで実行しているようです。クラスでそれを行うことはOKです(それは可能です)が、PersonオブジェクトのArrayListを作成している場合はあまり意味がありません。

ここでの主なポイントは、これは実際のメソッドまたはコンストラクターなど(実際のコードブロック)内で実行する必要があるということです。繰り返しになりますが、Person型のArrayListがPersonクラス内でどれほど役立つかは完全にはわかりません。

import java.util.ArrayList;

public class Person 
{                   // Don't use static here unless you want all of your Person 
                    // objects to have the same data
   String name;
   double age;
   double height;
   double weight;

   public Person(String name, double age, double height, double weight)
   {
      this.name = name;       // Must refer to instance variables that have
      this.age = age;         // the same name as constructor parameters
      this.height = height;    // with the "this" keyword. Can't use 
      this.weight = weight;    // Classname.variable with non-static variables
   }

}

public AnotherClass 
{
   public void someMethod()
   {
      Person joe = new Person("Joe", 30, 70, 180);
      ArrayList<Person> people = new ArrayList<Person>();
      people.add(joe);
      Person steve = new Person("Steve", 28, 70, 170);
      people.add(steve);            // Now Steve and Joe are two separate objects 
                                    // that have their own instance variables
                                    // (non-static)
   }
}
于 2012-06-20T00:35:54.847 に答える
0

そのコードを次のようなメインメソッドに配置します。

 public class Person {

     public static void main(String[] args ) {
         Person joe = new Person("Joe", 30, 70, 180);
         ArrayList<Person> people = new ArrayList<Person>();
         people.add(joe);
     }
 }
于 2012-06-20T00:36:19.297 に答える
0

これらをメソッドまたはブロック内に書き込みます。
お気に入り::

import java.util.ArrayList;

public class Person 
{
   static String name;
   static double age;
   static double height;
   static double weight;

  Person(String name, double age, double height, double weight)
  {
    Person.name = name;
    Person.age = age;
    Person.height = height;
    Person.weight = weight;
  }

  public static void main(String args[])
  {
    Person joe = new Person("Joe", 30, 70, 180);
    ArrayList<Person> people = new ArrayList<Person>();
    people.add(joe);
  }
}
于 2012-06-20T00:36:28.680 に答える
0

ArrayListの追加操作は、他の人が提案しているように、メソッドブロック(おそらくmain)で実行する必要があります。

public class Person  {
  static String name;
  static double age;
  static double height;
  static double weight;

  Person(String name, double age, double height, double weight) {
    Person.name = name;
    Person.age = age;
    Person.height = height;
    Person.weight = weight;
  }
}

public static void main(String[] args) {
  Person joe = new Person("Joe", 30, 70, 180);
  ArrayList<Person> people = new ArrayList<Person>();
  people.add(joe);
}
于 2012-06-20T00:36:42.660 に答える
0

コードを(コンストラクターの後に)メソッドに配置してから、別の場所でメソッドを呼び出します。すべてのインスタンスがフィールドを共有するため、この目的のためにフィールドを静的にすることはできません。

于 2012-06-20T00:36:44.077 に答える
0

まず、ArrayList変数は実際にはインスタンスレベル、またはである必要がありますstatic。そのように宣言します。

private ArrayList<Person> people;

また:

static ArrayList<Person> people;

次に、で操作を実行するには、ある種の関数が必要です。

public static void addPerson(Person p) {
    people.add(p);
}

第三に、それを呼び出す必要があります。これは次の方法で実行できます。

Person.addPerson(new Person("Joe", 30, 70, 180));

の本文main()、またはプログラムの実行に関連する場所。

于 2012-06-20T00:37:11.253 に答える
0

people.add(joe); を中かっこで囲みます。そしてコードはコンパイルされます:

{people.add(joe);}

なんで?初期化ブロックの演習として残します。

于 2012-06-20T00:45:19.163 に答える