Java .add()方法不适用于ArrayList

Java .add()方法不适用于ArrayList,java,list,arraylist,Java,List,Arraylist,我正在学习Java,我遇到了一个小问题。 应用于我的ArrayList对象的方法.add()不希望编译。 我在另一个程序上尝试了同样的方法(使用不同的参数),但效果很好,所以这次我显然做错了什么,但我不知道是什么原因。任何帮助都将不胜感激 import java.util.List; import java.util.ArrayList; private List<String> science = new ArrayList<String>(); science.add

我正在学习Java,我遇到了一个小问题。 应用于我的ArrayList对象的方法.add()不希望编译。 我在另一个程序上尝试了同样的方法(使用不同的参数),但效果很好,所以这次我显然做错了什么,但我不知道是什么原因。任何帮助都将不胜感激

import java.util.List;
import java.util.ArrayList;
private List<String> science = new ArrayList<String>();
science.add("geography");
import java.util.List;
导入java.util.ArrayList;
private List science=new ArrayList();
科学。添加(“地理”);
这段代码给出了以下错误:

  • 语法错误,请插入“)”以完成MethodDeclaration
  • 语法错误,请插入“SimpleName”以完成 限定名称
  • 令牌“”上出现语法错误,此令牌后面应为“”
  • 语法错误,请插入“标识符”()以完成 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.");
        }

}
import java.util.ArrayList;
导入java.util.List;
公共类传真机{
私有字符串名称;
tipo私人int设施;
private List science=new ArrayList();
private List other=new ArrayList();
科学。添加(“地理”);
公共设施(管柱名称、内部设施、内部tipo){
this.nome=nome;
if(science.toString().contains(nome)){
这1.tipo=2;
}
else if(other.toString()包含(nome)){
这个.tipo=1;
}
这是设施=设施;
}
公共字符串getNome(){
返回nome;
}
公共无效集合名称(字符串名称){
this.nome=nome;
}
公共设施{
如果(tipo==1)
系统输出打印项次(“实验室编号:+设施);
否则如果(tipo==2)
System.out.println(“库号:+设施”);
其他的
System.err.println(“设施不可用”);
}
公共设施(内部设施){
如果(设施<3),则此。设施=设施;
else System.err.println(“未指定设施”);
}
}
你不能把任何种类的代码放在你班上的任何地方

例如,在本例中,您可以将该行移动到构造函数中

您也可以使用init块;所以只需放大括号

 { 
   sciences.add("blocked");
 }
就在那里(有关详细信息,请参阅)

但真正的问题是:我猜
科学
列表包含了一些学生应该学习的科目。因此它应该是构造函数的参数;而不是硬编码源代码中的字符串

另一种方法是使该列表成为真正的“常量”;如下所示:

private final List<String> SCIENCES_THAT_GIVE_TIPO =  Arrays.asList("geography", "whatever");
private final List SCIENCES_给出的_TIPO=Arrays.asList(“地理”、“任何东西”);
让你的意图更清楚


及以上:使用字符串来表示这样的东西当然是简单而直接的;但是,一个相当糟糕的设计。所以,以防万一你想玩一点;你可能想读关于java;然后考虑把你的不同的科学变成一个枚举!

< p>语法不正确。 science.add(“geography”)-应该在方法或构造函数中完成。

无论如何

List<String> science  = Arrays.asList("geography", "geography2");
List science=Arrays.asList(“地理”、“地理2”);

这适用于您的情况

我对ArrayList的建议

ArrayList<String> science =new ArrayList<>(Arrays.asList("geography", "geography2"));
ArrayList science=新的ArrayList(Arrays.asList(“geography”、“geography2”);

那么,如果“science”和“other”将是永远不会改变的最终字符串列表,那么最好在main方法中声明它们吗?@ClaudioLavacca这真的要看情况而定;我更新了我的答案以给出一个提示。Sangwon Choi的答案是您需要修复的,但您的类存在一些设计缺陷:(1)构造函数有参数
tipo
,但从未使用过。(2)当
name
science
other
的内容不匹配时会发生什么情况?(3)我可以把
science
other
想象成
Facolta
的类型,因此,它们应该在外部;等等……无论如何,我想你正在学习,所以,继续:-)你能解释一下为什么你会对变量使用特定的类类型而不是使用接口类型吗?(你为什么叫它mStatus?)对不起,我以为它是ArrayList。我在ArrayList中遇到了同样的问题,所以我从代码中解决了这个问题,这就是为什么我将它称为mStatus。