2016-12-21 6 views
-2

私はJavaを学習していますが、少し問題が残っています。 ArrayListオブジェクトに適用された.add()メソッドは、コンパイルしたくありません。 別のプログラムで同じことを(別のパラメータで)試してみましたが、うまくいきましたので、今回は間違っていたことははっきりしていますが、何が分かりません。どんな助けもありがとう。ArrayListのadd()メソッドが動作しません

  • 構文エラー、
  • 構文エラーをMethodDeclarationを完了するために ")" 挿入 "SimpleName" を挿入 修飾名
  • を完了するために:

    import java.util.List; 
    import java.util.ArrayList; 
    private List<String> science = new ArrayList<String>(); 
    science.add("geography"); 
    

    コードのこのビットは私に次のエラーを与えますトークン "。"のシンタックスエラー、このトークンの後に@が返される

  • 構文エラー、完了するために "識別子"を入力してください MethodHeaderName

これは、プログラムの全体のコードです:

import java.util.ArrayList; 
import java.util.List; 

public class Facolta { 

     private String nome; 
     private int facilities, tipo; 
     private List<String> science = new ArrayList<String>(); 
     private List<String> other = new ArrayList<String>(); 

     science.add("geography"); 


     public Facolta(String nome, int facilities, int tipo) { 
      this.nome = nome; 
      if (science.toString().contains(nome)) { 
       this.tipo = 2; 
      } 
      else if (other.toString().contains(nome)) { 
       this.tipo = 1; 
      } 
      this.facilities = facilities; 
     } 

     public String getNome() { 
      return nome; 
     } 

     public void setNome(String nome) { 
      this.nome = nome; 
     } 

     public void getFacilities() { 
      if (tipo == 1) 
       System.out.println("Lab number: " + facilities); 
      else if (tipo == 2) 
       System.out.println("Library number: " + facilities); 
      else 
       System.err.println("Facility not available."); 

     } 

     public void setFacilities(int facilities) { 
      if (facilities < 3) this.facilities = facilities; 
      else System.err.println("Facility not specified."); 
     } 

} 
+0

Sangwon崔さんの答えは、あなたがそれを修正するために必要なものですが、あなたのクラスは、いくつかの設計上の欠陥を持っているため、この作品:(1)コンストラクタは、パラメータ 'TIPOを持っています'、しかし決して使用されることはありません。 (2) 'name'が' science'や 'other'の内容と一致しないとどうなりますか? (3)私は「Facolta」のタイプとして「科学」と「その他」を想像することができます。など...とにかく、私はあなたが学んでいると思うので、続ける:-) – JonDoe297

答えて

1

あなただけのコードのいずれかの種類がであなたのクラスの任意の場所をを置くことはできません。

この場合、などのコンストラクタに移動することができます。

initブロックを使用することもできます。これだけ(その上の詳細については、hereを参照)、右がかっこ

{ 
    sciences.add("blocked"); 
} 

を置きます。

実際には:scienceリストには、学生がやるべき科目が含まれていると思います。したがって、コンストラクタのパラメータである必要があります。 の代わりにハードコードあなたのソースコード内の文字列!

代わりに、そのリストを実際の「定数」にすることができます。このように:

private final List<String> SCIENCES_THAT_GIVE_TIPO = Arrays.asList("geography", "whatever"); 

あなた意思より明確にするために!

それを超えて:の文字列を使用してこのようなことを示すのは、もちろん単純明快です。かなり悪いデザインです。だから、ちょっと遊んでみたいです。 Java enumsについて読むことをお勧めします。あなたのさまざまな科学をEnumに変えることを検討してください!

+0

"科学"と "その他"が決して変わらない最終的な文字列のリストになるならば、主な方法でそれらを宣言する? –

+0

@ClaudioLavaccaそれは本当に依存します。私はヒントを与えるために私の答えを更新しました。 – GhostCat

0

構文が正しくありません。

science.add( "geography") - メソッドまたはコンストラクタで行う必要があります。とにかく

1

List<String> science = Arrays.asList("geography", "geography2"); 

あなたの条件

関連する問題