частотный анализ, кто-то, кто знает, как решить эту проблему. Я не могу сказать, сколько раз может приходить письмо

#java #arrays

#java #массивы

Вопрос:

Напишите программу, которая может считывать текст из файла и выполнять частотный анализ появляющихся букв Для хранения информации (частоты). вы должны использовать массив следующим образом. — Создайте массив с пространством для 127 int — Считывайте по одной букве за раз, преобразуйте ее в int (char-> int). Значение приходит, чтобы соответствовать ascii-коду письма. Обновите «счетчик» для соответствующего индекса в массиве. Пример! Место, где вы подсчитываете частоту, например, буквы A, соответствует ASCII-коду «A», т.е. 65.

     int[] array = new int[127];


    Scanner scan = null;
    int c = 0;
    try {

        scan = new Scanner(new File("C:\Users\-------\eclipse- 
       workspace\algo_data\src\klasslista.txt"));

        while(scan.hasNext()){

            String str = scan.next();
            char[] myChar = str.toCharArray();

            for (int j = 0; j < myChar.length; j  ) {
                for (char i = 65; i < 123; i  ) {
                    if(myChar[j] == i) {
                        //array[i] = myChar[j];
                        array[i] = myChar[j];  

                   How can it count and the letters??


                    }


                }

            }

            for (int i = 65; i < array.length; i  ) {

                System.out.print((char)array[i]);

            }
  

Комментарии:

1. Не просто копируйте и вставляйте назначение в stack overflow. Мы не будем делать это за вас. Вы явно начали, поэтому объясните , что вы пробовали, какие результаты вы получили и чем это отличается от того, что вы ожидали. «Когда я ______, я получаю ______, когда я ожидаю получить ______»

2. В чем проблема с вашим кодом там? На чем ты застрял? Я не понимаю, о чем вы спрашиваете.

Ответ №1:

Он не считает буквы. Код ASCII — это индекс массива, который вы ищете. Увеличивайте значение int в этом индексе на единицу каждый раз, когда вы сталкиваетесь с буквой. Значение int в индексе, представляющее этот код ASCII, является вашим счетчиком того, сколько раз встречается символ. Значение по умолчанию для каждого индекса в массиве должно быть -1, поэтому, если это так, вам нужно установить его равным 1, иначе увеличьте значение там на 1.

     int[] array = new int[127];
    Scanner scan = null;

    try {

        scan = new Scanner(new File("C:\Users\-------\eclipse-workspace\algo_data\src\klasslista.txt"));

        while (scan.hasNext()) {

            String str = scan.next();
            char[] myChar = str.toCharArray();

            for (int j = 0; j < myChar.length; j  ) {
                int temp = array[(int) myChar[j]];
                if (temp == -1) {
                    array[(int) myChar[j]] = 1;
                } else {
                    array[(int) myChar[j]] = temp   1;
                }
            }
        }

        for (int i = 0; i < 127; i  ) {
            char c = (char) i;
            System.out.println("Count of "   c ": "   array[i]);
        }
    } catch (FileNotFoundException fnfe) {

    }
  

Комментарии:

1. for (int j = 0; j < MyChar.length; j ) { for (char i = 65; i < 123; i ) { if (MyChar[j] == i) {array[i] = MyChar[j]; } }

2. У меня возникают циклы при чтении. Я запускаю от 65 до 123, чтобы получить значения ascci. Я нахожу значение и помещаю его в массив [i]. Ошибка в том, что каждый раз, когда я нахожу письмо, я должен считать. Я не знаю, как это сделать.

3. Я хочу сказать, что не помещайте значение ascii в массив. Используйте значение ascii в качестве индекса массива и укажите количество символов в этом индексе.

4. спасибо за помощь, он выписал несколько цифр. но не соответствует количеству букв.

5. Возможно, вы неправильно его печатали. Я добавил код печати. Печать должна выполняться вне цикла.