I'm having a problem with a program I'm trying to code. Basically it reads from two files, converts them into arrays, and compares similarities. It has worked when so far, but when the first .txt file reads "a b c d e f g h i j a a a a a a" and the second .txt file reads "a b c d e f g h i k" , I get the following error after entering the file names:
java.lang.ArrayIndexOutOfBoundsException: 10
at PlagiarismDetector.compareStrings(PlagiarismDetector.java:77)
at PlagiarismDetector.main(PlagiarismDetector.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
My code is as follows. Thanks to anyone who can help =)
import java.util.Scanner;
import java.io.*;
public class PlagiarismDetector
{
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("What file is the first file?");
String fileOne = reader.next();
String stringOne = readStringFromFile(fileOne);
System.out.println("What file is the second file?");
String fileTwo = reader.next();
String stringTwo = readStringFromFile(fileTwo);
if (stringOne == null || stringTwo == null)
{
return;
}
System.out.println("Comparing the 2 files......");
System.out.println("The result of the 2 files is ....");
if (compareStrings(stringOne, stringTwo))
{
System.out.println("Plagiarism detected. Cheaters!!!!");
}
else
{
System.out.println("No plagiarism detected");
}
}
public static String readStringFromFile(String filename)
{enter code here
String builder = "";
try
{
Scanner fileReader = new Scanner(new File(filename));
while (fileReader.hasNextLine())
{
builder = builder + fileReader.nextLine() + "
";
}
return builder;
}
catch (Exception e)
{
System.out.println("An error occurred while trying to open the file " + filename + ". Is the file located inside the same folder as the .class file and with the identical name?");
return null;
}
}
public static boolean compareStrings (String a, String b)
{
boolean checkForPlagiarism = true;
String[] piecesA = a.split("\s");
String[] piecesB = b.split("\s");
int count1 = 0;
int count2 = 0;
for (int counter = 0; counter <= piecesA.length - 1; counter++)
{
for(int counter2 = 0; counter<= piecesB.length - 1; counter++)
{
if(piecesA[counter].equals(piecesB[counter2]))
{
count1++;
}
}
}
for (int counter = 0; counter <= piecesB.length - 1; counter++)
{
for(int counter2 = 0; counter <= piecesA.length - 1; counter++)
{
if(piecesA[counter].equals(piecesB[counter]))
{
count2++;
}
}
}
if((count1/(int)piecesA.length)*100 >= 90 && (count2/(int)piecesB.length)*100 >= 90)
{
checkForPlagiarism = false;
}
return checkForPlagiarism;
}
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…