我一直收到错误:线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:0

时间:2013-10-21 21:32:12

标签: java

当我尝试运行此代码时,我不断收到此错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at Oblig3B.main(Oblig3B.java:8)

这是我的代码:

        import java.util.*;
        import java.io.*;

        class Oblig3B{
        public static void main(String[]args){

        OrdAnalyse oa = new OrdAnalyse();
Line 8. String filArgs=args[0];
        oa.analyseMetode(filArgs);
       }
       }

       class OrdAnalyse{
       void analyseMetode(String filArgs){


       Scanner input, innfil;
       String[] ord;
       int[] antall;
       int antUnikeOrd, antOrd;
       PrintWriter utfil;
       boolean sjekk;

       input=new Scanner(System.in);
       ord=new String[5000];
       antall=new int[5000];
       antUnikeOrd=0;
       antOrd=0;
       sjekk=true;

       try{
       innfil=new Scanner(new File(filArgs));

        //Here it reads the file, word by word.
        while(innfil.hasNext()){
        String ordLest=innfil.next().toLowerCase();
        sjekk=false;
            for(int i=0; i<ord.length; i++){
            if(ordLest.equals(ord[i])){
            antall[i]+=1;
            sjekk=true;
            }
        }
        if(!sjekk){

            ord[antUnikeOrd]=ordLest;
            antall[antUnikeOrd]++;
            antUnikeOrd++;
        }

        antOrd++;
        }
        innfil.close();
        }catch(Exception e){
        e.printStackTrace();
        }


        try{
        utfil=new PrintWriter(new File("Oppsummering.txt"));

        utfil.println("Antall ord lest: " +antOrd+ " og antall unike ord: "+antUnikeOrd+"  
        "+ ord.length);

        finnOrd(antall, ord, utfil);

        for(int i=0; i<ord.length; i++){
        utfil.println(ord[i]+("  ")+antall[i]);
        }

        utfil.close();
        }catch(Exception e){
        e.printStackTrace();
        }
        }


        void finnOrd(int[] antall, String[] ord, PrintWriter utfil){
        int teller=1000;
        for(int i=0; i<ord.length; i++){
        if(antall[i]>teller){
        teller=antall[i];
        }


        double tiprosent=teller*0.90;
        System.out.println(tiprosent + "   " + teller);
        for(i=0; i<ord.length; i++){
        if(antall[i]>tiprosent){
            utfil.println("Vanlige ord: "+ord[i]+"t("+antall[i]+" forekomster)");
        }
        }
        }
        }
        }

我不确定我需要做些什么来修复此错误。我很感激能得到的任何帮助。

(如果代码有点乱,我很抱歉,不知道如何在stackoverflow上正确修复它)

非常感谢

3 个答案:

答案 0 :(得分:1)

Java将传递给作为数组启动的应用程序的每个参数绑定到String[] parameter in your main`方法。

如果您没有将任何参数传递给应用程序启动器,例如

java Oblig3B

然后数组绑定的大小为0,因此

String filArgs = args[0];

尝试访问索引0处的第一个元素将失败。检查你实际上是在传递参数。

java Oblig3B "Some agument"

答案 1 :(得分:1)

您没有传递任何命令行参数,因此args数组的长度为零。因此,尝试任何数组访问都会抛出ArrayIndexOutOfBoundsException

在尝试访问args数组之前测试它的长度。在此处,在访问args[0]之前,请确保长度至少为1。类似的东西:

if (args.length >= 1)
{
    String filArgs=args[0];
    // Do your processing.
}
else
{
    // Handle the error here.
}

答案 2 :(得分:1)

如果您通过命令行运行程序,则可以在运行命令时再传递一个参数。如果您使用的是IDE,例如eclipse你可以通过属性设置传递参数 - &gt;运行/调试设置

基本上,String filArgs=args[0];正在寻找不存在的第一个参数