Отслеживание случаев появления строки в файле не будет работать после цикла в Java - PullRequest
0 голосов
/ 18 октября 2019

Я нахожусь во введении в класс CS, и мне нужно извлечь строки из файла и вывести, сколько раз эта строка находится в файле. Эта часть работает нормально. Проблема в том, что мы должны зациклить его, чтобы он проходил один и тот же процесс столько раз, сколько они хотят. Когда я сбрасываю счетчик переменных, который подсчитывает количество раз, которое строка находится в файле, в 0, вывод говорит, что переменная равна 0. Она инициализируется в 0, поэтому я не вижу, что меняется после цикла.

while (answer) {
    int timesUsed = 0;  for (int i = 0; i < monAr.length; ++i) {
        while (monFile.hasNext()) {
            monAr[i] = monFile.next();

            if (monAr[i].equalsIgnoreCase(desiredTag)) {
                timesUsed = timesUsed + 1;
            }
        }
    }
    System.out.println("On Monday, #" + desiredTag + " appeared " + timesUsed + " times "+ "and was " + (((float) timesUsed / monAr.length) * 100) + "% of all hashtags used for the day."); 
    System.out.print("Do you want to search another hashtag (y/n)? ");
    choice = scnr.nextLine();

    if (choice.equals("n")) {
     answer = false;
   }
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Проблема в том, что вы используете Scanner для чтения вашего файла, но если вам нужно пересканировать, указатель уже находится в конце вашего файла.

Вам нужно создать экземплярваш сканер прямо под началом while петли:

Scanner monFile;
While(answer) {
    monFile = new Scanner(new File(“test/Monday”));
    ...
}
0 голосов
/ 18 октября 2019

Вы можете иметь другую переменную, например, totalUses, которая будет хранить результаты каждой итерации:

int totalUses = 0;
while (answer) {
    int timesUsed = 0;  
    for (int i = 0; i < monAr.length; ++i) {
        while (monFile.hasNext()) {
            monAr[i] = monFile.next();

            if (monAr[i].equalsIgnoreCase(desiredTag)) {
                timesUsed = timesUsed + 1;
            }
        }
    }
    System.out.println("On Monday, #" + desiredTag + " appeared " + timesUsed + " times "+ "and was " + (((float) timesUsed / monAr.length) * 100) + "% of all hashtags used for the day."); 
    System.out.print("Do you want to search another hashtag (y/n)? ");
    choice = scnr.nextLine();

    if (choice.equals("n")) {
     answer = false;
   }
   totalUses += timesUsed;
}
System.out.println("Total uses : "+ totalUses);
...