Я пишу программу для домашней работы, где я должен изменить строку, используя меню. Остальная часть кода работает отлично, за исключением одной части, которая имеет меня в привязке. Я использую метод, чтобы найти слово и все его вхождения в String. Всякий раз, когда я выполняю этот метод вне цикла, я получаю результат, который мне нужен, но всякий раз, когда я использую его в течение некоторого времени или оператора switch, программа ничего мне не возвращает. Метод должен возвращать int для количества вхождений. Это выдержка из этого кода:Мой программный метод не будет ничего делать
import java.util.Scanner;
public class test {
public static Scanner scnr = new Scanner(System.in);
public static int findWord(String text, String userText) {
int occurance = 0;
int index = 0;
while (index != -1) {
index = userText.indexOf(text, index);
if (index != -1) {
occurance++;
index = index + text.length();
}
}
return occurance;
}
public static void main(String[] args) {
System.out.println("Enter a text: ");
String userText = scnr.nextLine();
System.out.println("Enter a menu option");
char menuOption = scnr.next().charAt(0);
switch (menuOption) {
case 'f':
System.out.println("Enter a phrase from text: ");
String text = scnr.nextLine();
int occurance = (findWord(text, userText));
System.out.println("" + text + " occurances : " + occurance + "");
break;
default:
System.out.println("Goodbye");
}
return;
}
}
Теперь пара вещей, которые я заметил. Если я приглашу пользователя во внутри метода, я верну свое целое число, но не текст, который я искал, чтобы завершить мой println внутри оператора switch. И всякий раз, когда я вызываю пользователя для слова внутри оператора switch, я ничего не получаю. Если у кого-то есть какие-либо решения для меня, я был бы очень признателен, потому что я не знаю, что я могу игнорировать или пропустить.
Узнайте, как отлаживать код. Итак, вы можете видеть, что происходит. По какой-то причине текст читается как пустая строка, поэтому ваш цикл никогда не заканчивается (строка «» находится в индексе 0 в каждом цикле!). – Heri
Причина может заключаться в том, что вы используете 'nextLine()' после 'next()' в цикле, и поскольку последний не использует последнюю строку новой строки, эта проблема должна возникать. Вы проверили эту тему? Http: //stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo –