计算每个字母在文件中显示的次数

时间:2017-05-15 02:06:17

标签: java bluej

本质上,此代码采用一个文件(这是文本的几个段落)并计算每个字母出现的次数并将其打印到控制台上。虽然我已经完成了计算方面的所有代码,但我遇到了异常。当我运行它时,它显示:

// Document your class here

import java.util.Scanner;
import java.io.File;
import java.io.FileInputStream;
public class LetterCount {

public final static String FILENAME = "testFile.txt";

// Driver to test LetterInventory class
public static void main(String[] args) {
    Scanner inputFile = null;
    try {
        inputFile = new Scanner(new File(FILENAME));
    } catch (Exception e) { 
        System.out.println("File could not be opened: " + FILENAME);
        System.exit(0);
    }

    int[] counts = countOccurrences(inputFile);
    displayTable(counts);
    resetTable(counts);  
}

public static int[] countOccurrences (Scanner inputFile) {
    int[]counts = new int[26];
    char[] characters = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    while (inputFile.hasNextLine()) {
        String theWord = inputFile.next();
        theWord = theWord.toLowerCase();

        for (int j = 0; j < theWord.length(); j++) {
            for (int counter = 0; counter < 26; counter++) {
                if (theWord.charAt(j) == characters[counter]) {
                    counts[counter] += 1;
                }

            }
        }
    }
    return counts;
}

public static void displayTable (int[] counts) {
    for (int index = 0; index < 26; index++) {
        System.out.println((char)('a' + index) + ":\t" + counts[index]);
    }
}

public static void resetTable (int[] counts) {
    System.out.println();
    for (int index = 0; index < 26; index++) {
        System.out.println((char)('a' + index) + ":\t0");
    }
}
}  

这是我的代码:

Route::get('orders/delete/{id}',array
('as'=>'delete',
'uses'=>'Admin\OrdersController@delete'));

当我点击NoSuchElementException的突出显示部分时,我看到它指的是我创建的字符串。我做错了什么,我该怎么做才能解决它?

3 个答案:

答案 0 :(得分:2)

用于读取数据的方法应与用于检查是否有更多数据的方法类型相同。

在您的while语句中,您使用inputFile.hasNextLine(),因此在其后的行上,您应该使用inputFile.nextLine()(而不是像现在这样使用inputFile.next()。)

或者,您可以更改while语句以使用inputFile.hasNext()

答案 1 :(得分:0)

无保证,但请尝试在inputFile.hasNext()而不是while中使用inputFile.hasNextLine()。下一个可用并不一定与下一个可用相同。

答案 2 :(得分:0)

您不需要characters数组(您可以使用显示的相同数学运算来执行counts的添加)。此外,您应该与拨打Scanner.hasNextLine()Scanner.next()的方式保持一致(使用hasNext()检查下一个)。像,

public static int[] countOccurrences(Scanner inputFile) {
    int[] counts = new int[26];
    while (inputFile.hasNext()) {
        String theWord = inputFile.next().toLowerCase();
        for (char ch : theWord.toCharArray()) {
            if (Character.isLetter(ch)) {
                counts[ch - 'a']++;
            }
        }
    }
    return counts;
}