我有以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
1 at test.Main.main(Main.java:28)
我是初学者,我真的不明白事情会被困在哪里。我认为for
中的某个地方。
有些帮助吗?
MAIN CLASS
public static ArrayList<Patron> patr_list= new ArrayList<Patron> ();
public static ArrayList<Angajat> angj_list= new ArrayList<Angajat> ();
public static ArrayList<Persoana> pers_list = new ArrayList<Persoana>();
public static void main(String []args) throws Exception
{
BufferedReader flux_in= new BufferedReader (new InputStreamReader (new FileInputStream("C:/Users/Administrator/workspace/test/test.txt")));
String linie;
while((linie= flux_in.readLine()) != null)
{
String [] s;
s= linie.split(";");
if(linie.contains("angajat"))
{
angj_list.add(new Angajat( s[0], Integer.parseInt(s[1]), Calendar.getInstance(), s[3], s[4] ));
}
else
if(linie.contains("patron"))
{
patr_list.add(new Patron(s[0], Integer.parseInt(s[1]), Integer.parseInt(s[2]), Integer.parseInt(s[3])));
}
pers_list.addAll(patr_list);
pers_list.addAll(patr_list);
System.out.println(String.format("Nume", "Varsta", "Data_angajarii", "Loc de munca", "Functia"));
for( Angajat angj: angj_list)
{
System.out.println(angj);
}
System.out.println(String.format("Nume", "Varsta", "Nr de firme", "Nr de angajti"));
for( Patron patr: patr_list)
{
System.out.println(patr);
}
}
}
}
Persoana CLASS
public String nume;
public int varsta;
public Persoana (String nume, int varsta)
{
this.nume=nume;
this.varsta=varsta;
}
public String getNume(){
return nume;
}
public void setNume(String nume)
{
this.nume = nume;
}
public int getVarsta()
{
return varsta;
}
public void setVarsta(int varsta)
{
this.varsta = varsta;
}
}
赞助人CLASS
public int nr_firme;
public int nr_angajati;
public Patron(String nume, int varsta, int nr_firme, int nr_angajati)
{
super(nume,varsta);
this.nr_firme=nr_firme;
this.nr_angajati=nr_angajati;
}
public int getNr_firme()
{
return nr_firme;
}
public void setNr_firme(int nr_firme)
{
this.nr_firme = nr_firme;
}
public int getNr_angajati()
{
return nr_angajati;
}
public void setNr_angajati(int nr_angajati)
{
this.nr_angajati = nr_angajati;
}
public String toString()
{
return "Patronul are" + nr_firme + "firme si" + nr_angajati+ "numar de angajti";
}
Angajat CLASS
public Calendar data_angajarii;
public String loc_munca;
public String functie;
public Angajat(String nume, int varsta, Calendar data_angajarii, String loc_munca, String functie)
{
super(nume, varsta);
this.data_angajarii=data_angajarii;
this.loc_munca=loc_munca;
this.functie=functie;
}
public Calendar getData_angajarii()
{
return data_angajarii;
}
public void setData_angajarii(Calendar data_angajarii)
{
this.data_angajarii = data_angajarii;
}
public String getLoc_munca()
{
return loc_munca;
}
public void setLoc_munca(String loc_munca)
{
this.loc_munca = loc_munca;
}
public String getFunctie()
{
return functie;
}
public void setFunctie(String functie)
{
this.functie = functie;
}
public String toString()
{
return "Angajatul a fost angajat in data de" + data_angajarii + "lucreaza la " + loc_munca+ " si are functia de " + functie;
}
文字文件
angajat ionel 16 1991,8,4 timisoara director;
patron gigel 45 100 5000;
答案 0 :(得分:3)
您没有提供输入字符串不包含分号的情况,因此split返回的字符串数组没有第二个元素。
同样扩展到您访问的后续字段。例如,如果string只有1个分号,则字符串数组中不会有第3个元素,依此类推。
以下是您收到的消息的简短说明:
java.lang.ArrayIndexOutOfBoundsException:
1 at test.Main.main(Main.java:28)
这告诉您以下内容:
掌握了这些知识,你可以自己找到错误。因为,在该行中,只有一个数组访问使用1作为索引。
答案 1 :(得分:2)
执行s= linie.split(";");
时,您会假设(错误的假设)始终存在s[0]
,s[1]
,s[2]
,s[3]
和{{1} }}。 (想想当你的输入不包含s[4]
时会发生什么?)。
您应该验证;
是否具有您期望的长度。
答案 2 :(得分:0)
这是你的问题'
angajat ionel 16 1991,8,4 timisoara director;
patron gigel 45 100 5000;
你按";"
分裂。 ";"
位于该行的末尾。因此s[0]
是整行,之后没有s[1]
或任何索引。
而是由此"[\\s;]"
拆分。这应该工作。这将由空格和分号分开。
分手后这样做
String name = s[0] + " " s[1]; // This will concatenate the first two indices
检查此图表以查看正确的指数。
new Angajat( s[0], Integer.parseInt(s[1]), Calendar.getInstance(), s[3], s[4])
angajat ionel 16 1991,8,4 timisoara director
name s[2] s[3] s[4] s[5]
new Patron(s[0], Integer.parseInt(s[1]), Integer.parseInt(s[2]), Integer.parseInt(s[3])
patron gigel 45 100 5000
name s[2] s[3] s[4]