当我尝试运行此代码时,我不断收到此错误:
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上正确修复它)
非常感谢
答案 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];
正在寻找不存在的第一个参数