-1

コーディングしようとしているプログラムに問題があります。基本的に、2つのファイルから読み取り、それらを配列に変換し、類似性を比較します。これまでは機能していましたが、最初の.txtファイルに「abcdefghijaaaaa a」、2番目の.txtファイルに「abcdefghik」と表示されている場合、ファイル名を入力すると次のエラーが発生します。

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)

私のコードは次のとおりです。助けることができる人に感謝します=)

    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() + "\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");

       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;
      }
    }
4

2 に答える 2

2
          if(piecesA[counter].equals(piecesB[counter]))

する必要があります

          if(piecesA[counter2].equals(piecesB[counter]))
于 2013-03-04T05:10:02.763 に答える
1

これは疑わしいように見えます:

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++;
      }
   }
}

間違った配列の長さによって制限されるカウンター

あなたはおそらくこれをしたいでしょう:

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

また、規則は次のようにループを書くことです:

 for(int counter2 = 0; counter2 < piecesB.length; counter2++)
于 2013-03-04T05:06:15.483 に答える