Я пытаюсь прочитать количество букв из файла, который вводит пользователь, в данном случае: "cyphertext.txt".Проблема, с которой я столкнулся, состоит в том, что вместо вывода файла с 94 "E" или 27 "Z" он выводит количество букв в имени файла, поэтому в "ciphertext.txt" 2 "T".s.(Это было закодировано в BlueJ)
Вот код из Частотомер :
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
public class FrequencyTester
{
public static void main(String[] args) throws IOException
{
//freq.findFile();
Scanner in = new Scanner(System.in);
String fileNameStr = "";
while(! (new File (fileNameStr + ".txt").isFile()))
{
System.out.print("Please input the name of your desired file (no file extension required): ");
fileNameStr = in.next() + in.nextLine();
if(new File (fileNameStr + ".txt").isFile())
{
System.out.println("\nFile accepted.");
Frequency freq = new Frequency(fileNameStr);
Scanner inFile = new Scanner(fileNameStr + ".txt");
freq.fileWords(inFile);
freq.frequencyPrinter();
}
else
{
System.out.println("\nError: Invalid File Name");
}
}
}
}
Вот код из Частота :
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
public class Frequency
{
// instance variables - replace the example below with your own
private int x;
private String fileNameStr, oneWord, oneChar;
public final char [] alphabet = {'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'};
public int [] alphaCounter = new int[alphabet.length];
/**
* Constructor for objects of class Frequency
*/
public Frequency(String fileNameStr) throws IOException
{
// initialise instance variables
//File fileName = new File (fileNameStr + ".txt");
PrintWriter outFile = new PrintWriter(new File(fileNameStr +"Frq.txt"));
//Scanner inFile = new Scanner(fileName);
for(int h = 0; h < alphaCounter.length; h++)
alphaCounter[h] = 0;
}
public void fileWords(Scanner inFile)
{
while(inFile.hasNext())
{
oneWord = inFile.next();
System.out.println(oneWord);
for(int i = 0; i < oneWord.length(); i++)
{
if(!Character.isWhitespace(oneWord.charAt(i)))
charCounter(i);
}
}
}
public void charCounter(int i)
{
for(int j = 0; j < alphabet.length; j++)
{
if(oneWord.charAt(i) == alphabet[j])
{
alphaCounter[j]++;
}
}
}
public void frequencyPrinter()
{
System.out.print("\n");
for(int k = 0; k < alphabet.length; k++)
{
System.out.print(alphabet[k] + " - " + alphaCounter[k] + "\n");
}
}
}
Вот настройка в BlueJ и Выход:
BlueJ
Выход