#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. Возможно, вы неправильно его печатали. Я добавил код печати. Печать должна выполняться вне цикла.