-3

さて、このコードの基準は、文字列で見つかった単語が文字列2で90%の確率で見つかった場合、文字列2の単語が文字列1で90%の確率で見つかった場合、ブール値はtrueである必要があるということです。そしてそれは盗作が起こったと言うべきです。コードは以下のとおりです。

import java.io.*;
import java.util.Scanner;

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)
    {
 String builder = "";
 try
 {
     Scanner fileReader = new Scanner(new File(filename));
     while (fileReader.hasNextLine())
     {
  builder = builder + fileReader.nextLine() + "\n";
     }

     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");

   double count1 = 0.0;
   double count2 = 0.0;
   for (int counter = 0; counter < piecesA.length; counter++)
    {
      for(int counter2 = 0; counter < piecesB.length; counter2++)
      {
          if(piecesA[counter].equals(piecesB[counter2]))
          {
          count1++;
          }
      }
    }
   for (int counter = 0; counter < piecesB.length; counter++)
    {
      for(int counter2 = 0; counter < piecesA.length; counter2++)
      {
          if(piecesA[counter2].equals(piecesB[counter]))
          {
          count2++;
          }
      }
    }

   if((count1/piecesA.length) >= 0.9 && (count2/piecesB.length) >= 0.9)
   {
     checkForPlagiarism = true;
   }    
    return checkForPlagiarism;
  }
}

このエラーメッセージが表示されますが、デバッグできませんでした。

java.lang.ArrayIndexOutOfBoundsException: 3
at PlagiarismDetector.compareStrings(PlagiarismDetector.java:67)
at PlagiarismDetector.main(PlagiarismDetector.java:24)
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)

助けていただければ幸いです。

4

1 に答える 1

2

for(int counter2 = 0; counter < piecesB.length; counter2++)

おそらく

for(int counter2 = 0; counter2 < piecesB.length; counter2++)

于 2013-03-04T06:06:38.360 に答える