-2

ファイルから入力を読み取り (独立宣言をテストとして使用)、int、char、string などの数を別の新しいファイルに書き込むプログラムを作成します。しかし、配列インデックスが範囲外であるという問題が発生しています。ループを何十回も調べましたが、何が問題を引き起こしているのかわかりません。助けてくれてありがとう=]

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class P5 {

    static String arrayString[] = new String[100];
    static int numberLines = 0;
    static int numberWords = 0;
    static int numberChars = 0;
    static int numberUpper = 0;
    static int numberLower = 0;
    static int numberDigits = 0;
    static int numSpaces = 0;
    static int numberTabs = 0;
    static int numberSpecial = 0;


    private static void readFile(String inputFile) {    
        try{

            Scanner fileScan = new Scanner(new File("Declaration.txt"));

            while(fileScan.hasNext()){

                arrayString[numberWords] = fileScan.next();
                numberWords++;
            }

            while(fileScan.hasNextLine()){
                numberLines++;
            }

            fileScan.close();
        }

        catch(IOException e){
        }
    }   

    private static void gatherStatistics(String sArray[]) {
        for (int i = 0; i < sArray.length; i++){

            String line = sArray[i];
            numberChars += line.length();

            for (int j = 0; j < line.length(); j++){

                char c = line.charAt(j);    

                if(Character.isUpperCase(c))
                    numberUpper++;

                else if(Character.isLowerCase(c))
                    numberLower++;

                else if(Character.isDigit(c))
                    numberDigits++;

                else if(Character.isSpaceChar(c))
                    numSpaces++;

                else if(c == '\t')
                    numberTabs++;

                else
                    numberSpecial++;
            }
        }
    }

    private static void writeFile(String outputFile) {

        try{

            PrintWriter fileOut = new PrintWriter(new File("Statistics.txt"));
            fileOut.println("Number of Lines: " + numberLines);
            fileOut.println("Number of Words: " + numberWords);
            fileOut.println("Number of Lines: " + numberChars);
            fileOut.println("Number of Lines: " + numberUpper);
            fileOut.println("Number of Lines: " + numberLower);
            fileOut.println("Number of Lines: " + numberDigits);
            fileOut.println("Number of Lines: " + numSpaces);
            fileOut.println("Number of Lines: " + numberTabs);
            fileOut.println("Number of Lines: " + numberSpecial);

            fileOut.close();
            System.exit(1);

        } catch (FileNotFoundException e){}
    }

    public static void main(String[] args) {

        readFile(args[0]);
        gatherStatistics(arrayString);
        writeFile(args[1]);
        System.exit(1);

    }
}
4

1 に答える 1

3

100 行を超えるファイルを読みました。

配列を使用する代わりに、使用しますArrayList

この行を変更します。

static String arrayString[] = new String[100];

に:

static ArrayList<String> arrayString = new ArrayList<String>();

この行を変更します。

private static void gatherStatistics(String sArray[]) {

に:

private static void gatherStatistics(ArrayList<String> sArray) {

この行を変更します。

arrayString[numberWords] = fileScan.next();

arrayString.add(fileScan.next());
于 2013-11-11T03:08:08.050 に答える