0

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

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上正确修复它)

非常感谢

4

3 回答 3

1

如果您通过命令行运行程序,则可以在运行命令时再传递一个参数。如果您使用的是 IDE,例如 eclipse,您可以通过 Properties -> Run/Debug settings 设置参数来传递参数

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

于 2013-10-21T21:36:46.460 回答
1

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

args在尝试访问它之前测试数组的长度。在这里,在访问之前确保长度至少为 1 args[0]。就像是:

if (args.length >= 1)
{
    String filArgs=args[0];
    // Do your processing.
}
else
{
    // Handle the error here.
}
于 2013-10-21T21:34:48.707 回答
1

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

如果您不向应用程序启动器传递任何参数,例如

java Oblig3B

那么数组绑定的大小将为 0,因此

String filArgs = args[0];

尝试访问索引为 0 处的第一个元素将失败。检查您是否确实在传递参数。

java Oblig3B "Some agument"
于 2013-10-21T21:34:04.817 回答