The code below throws an Array out of bound exception. I want to print the blank value also.
Here sourceDir[i].length=3
and targetDir[i].length=10
. If I remove sourceDir[i].getName
then it works fine.
int compareSize = sourceDir.length > targetDir.length ? sourceDir.length : targetDir.length;
String[] resultArr = null;
String resultFilename = null;
for(int i = 0; i < compareSize; i++){
resultFilename = currDir + "\\Results\\Result" + (i+1) + ".htm";
readReport = new BufferedReader(new FileReader(resultFilename));
resultArr = getResult(readReport);
bw.write("<tr><td>" + (i+1) + "</td><td>" + sourceDir[i].getName() + "</td><td>"
+ targetDir[i].getName() + "</td><td>" + resultArr[0] + "</td><td>" + resultArr[1]
+ "</td><td>" + "<a href=\"Result" + (i+1) + ".htm\">Link to Result</a></td></tr>");
}
bw.write("</tr></table></Div></Body></html>");
bw.close();
}
答案 0 :(得分:0)
这个问题的答案是直截了当的。
如果targetDir.length&gt; sourceDir.length
,您将获得sourceDir [i] .getName()的相同ArrayIndexOutOfBoundsException答案 1 :(得分:0)
好的compareSize将等于更大的数字长度。你的问题在你的循环中你的一个dir更小,所以当[i]达到一个更高的数字然后更小的dir的长度它将超出界限。
一种解决方案是将resultArr更改为:
typedef struct node{
int column;
int value;
int row;
struct node *next;
} element;
在for循环中(确保没有任何超出界限):
List<String> resultArr = new ArrayList<>();
在第一个for循环之外,您可以立即遍历resultArr arrayList:
if(i < sourceDir.length){
System.out.println(sourceDir[i]); //just so you can see value
resultArr.add(sourceDir.get(i)); //add everything to an arrayList
}
if(i < targetDir.length){
System.out.println(targetDir[i]); //just so you can see value
resultArr.add(targetDir.get(i)) //add everything to an arrayList
}
你也可以为每个循环使用a,但是如果你是java的新手,那么你对对象的理解可能是不存在的