2013-10-21 39 views
0

当我尝试运行此代码,我不断收到此错误:我不断收到错误:异常线程“main” java.lang.ArrayIndexOutOfBoundsException: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)"); 
     } 
     } 
     } 
     } 
     } 

我不知道我需要做什么来解决这个错误。我将不胜感激任何帮助。

(对不起,如果代码是有点乱,不知道我怎么能在这里正确将其固定到计算器)很多

+0

您如何运行Java程序的第一个参数? –

+0

你有没有通过它的任何论点?我猜不是。 –

+0

@SotiriosDelimanolis我在命令提示符下运行java程序 – Conscious

回答

1

的Java绑定传递给推出作为一个应用程序的每个参数

谢谢数组到String[] parameter in your main`方法。

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

java Oblig3B 

那么势必阵列将拥有大小为0,因此

String filArgs = args[0]; 

试图访问的第一个元素,在索引0处,将失败。检查你是否真的传递了参数。

java Oblig3B "Some agument" 
1

您没有传递任何命令行参数,所以args数组的长度为零。所以,尝试任何数组访问将抛出一个ArrayIndexOutOfBoundsException

在尝试访问数组之前,先测试args数组的长度。在访问args[0]之前,请确保长度至少为1。例如:

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

如果您正在通过命令行运行程序,则可以在运行命令时再传递一个参数。如果您使用的是IDE等日食您可以通过通过属性设置它传递参数 - >运行/调试设置

基本上,String filArgs=args[0];正在寻找不存在

相关问题