我正在编写一个家庭作业程序,我将使用菜单修改字符串。其余的代码工作得很好,除了一个让我在绑定中的部分。我正在使用一种方法,以便在字符串中查找单词及其出现的所有内容。每当我在循环之外执行此方法时,我得到了我需要的结果,但每当我在while或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;
}
}
现在我注意到了几件事。如果我在方法内部提示用户,我会返回我的整数,但不是我要查找的文本,以便在switch语句中完成我的println。每当我提示用户输入switch语句中的单词时,我什么也得不回来。如果有人对我有任何解决方案,我会非常感激,因为我不知道我可以忽视或遗失的东西。
答案 0 :(得分:0)
您需要将char menuOption = scnr.next().charAt(0);
更改为char menuOption = scnr.nextLine().charAt(0);
。
答案 1 :(得分:0)
问题在于您的Scanner
方法,您正在使用scnr.next()
连续阅读,但应更改为scnr.nextLine()`,如下所示:
public static void main(String[] args) {
Scanner scnr = null;
try {
scnr = new Scanner(System.in);
System.out.println("Enter a text: ");
String userText = scnr.nextLine();
System.out.println("Enter a menu option");
char menuOption = scnr.nextLine().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;
} finally {
if(scnr != null)
scnr.close();
}
}
另外,请确保在finally
块中正确关闭扫描仪对象。