【问题标题】:Error ArrayIndexOutOfBoundsException错误 ArrayIndexOutOfBoundsException
【发布时间】:2013-12-17 15:43:16
【问题描述】:

我有以下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 
    1 at test.Main.main(Main.java:28)

我是一个初学者,我真的不明白事情卡在哪里。我想在for 的某个地方。

请帮忙?

主类

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);
        }
    }
}
}

角色类

public String nume;
public int varsta;

public  Persoana (String nume, int varsta)
{
    this.nume=nume;
    this.varsta=varsta;

}

公共字符串 getNume() {

返回数字;

}

public void setNume(String nume)
{
    this.nume = nume;
}

public int getVarsta() 
{
    return varsta;
}

public void setVarsta(int varsta)
{
    this.varsta = varsta;
}

}

赞助人等级

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";        

}

安加特班

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 导演;

赞助人 gigel 45 100 5000;

【问题讨论】:

  • 哪一行是28?
  • 请提供完整的源文件,包括类+包声明和导入语句。提供的代码 sn-p 中的第 28 行是一个空行。或者,突出显示或加粗上例中引发异常的行。
  • 请提供您的文本文件的 sn-p。
  • 我提供了你所要求的。谢谢@peeskillet。第 28 行是: angj_list.add(new Angajat( s[0], Integer.parseInt(s[1]), Calendar.getInstance(), s[3], s[4] ));
  • 不,你没有,我要的是文本文件。

标签: java arrays exception


【解决方案1】:

您没有提供输入字符串不包含分号的情况,因此 split 返回的字符串数组没有第二个元素。

这同样适用于您访问的后续字段。例如,如果您的字符串只有 1 个分号,则字符串数组中将没有第 3 个元素,依此类推。

这里是您收到的消息的简短说明:

java.lang.ArrayIndexOutOfBoundsException: 
   1 at test.Main.main(Main.java:28)

这会告诉您以下信息:

  • 您试图访问一个不存在的数组元素。
  • 错误的索引是 1
  • 发生在源文件 Main.java 的第 28 行

有了这些知识,您就可以自己发现错误。因为,在那一行中,只有一个使用 1 作为索引的数组访问。

【讨论】:

    【解决方案2】:

    当您执行s= linie.split(";"); 时,您假设(错误假设)始终存在s[0]、s[1]、s[2]、s[3] 和s[4]。 (想想当您的输入不包含; 时会发生什么?)。

    您应该验证s 的长度是否符合您的预期。

    【讨论】:

      【解决方案3】:

      这是你的问题'

      angajat ionel 16 1991,8,4 timisoara 导演;

      赞助人 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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-24
        • 2023-04-03
        • 2013-07-08
        • 2019-04-15
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多