Java 我的程序方法不会输出任何东西

Java 我的程序方法不会输出任何东西,java,methods,switch-statement,Java,Methods,Switch Statement,我正在为家庭作业编写一个程序,使用菜单修改字符串。代码的其余部分工作正常,但有一部分让我陷入困境。我正在使用一种方法来查找一个单词及其在字符串中出现的所有内容。每当我在循环外执行此方法时,我都会得到所需的结果,但每当我在while或switch语句内使用它时,程序不会返回任何信息。该方法需要为出现的次数返回一个int。这是该代码的摘录: import java.util.Scanner; public class test { public static Scanner

我正在为家庭作业编写一个程序,使用菜单修改字符串。代码的其余部分工作正常,但有一部分让我陷入困境。我正在使用一种方法来查找一个单词及其在字符串中出现的所有内容。每当我在循环外执行此方法时,我都会得到所需的结果,但每当我在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语句中提示用户输入单词时,我什么也得不到。如果有人能为我提供任何解决方案,我将不胜感激,因为我不知道我可能忽略或遗漏了什么。

您需要更改
char menuOption=scnr.next().charAt(0)
to
char menuOption=scnr.nextLine().charAt(0)

问题在于您的
扫描仪
方法,您正在使用
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
块中正确关闭扫描仪对象。

请了解如何调试代码。所以你可以看到发生了什么。由于某些原因,文本被读取为空字符串,因此循环永远不会结束(在每个循环中的索引0处都会找到字符串!)。原因可能是您在循环中使用
nextLine()
之后的
next()
,并且后一个循环不会使用最后一个换行,因此必须发生此问题。你检查过这条线了吗?哦,我的错,找到了!