Java 使用扫描仪多次使用文本字符串调用交换机

Java 使用扫描仪多次使用文本字符串调用交换机,java,Java,在我的Java类中,一个开始的任务是讲述一个简短的故事,使用扫描器从用户那里获取输入以选择一个部件并向前/向后 主类中代码的开头如下所示: Scanner sc=新扫描仪(System.in); System.out.println(“你想知道我早上的哪一部分?“日常工作”、“通勤”或“在学校”?”); 字符串部分=sc.next(); 系统输出打印(故事(部分)); 我尝试在一个单独的公共静态字符串类中构建一个开关,然后使用System.out.print(故事(部分))返回它。看起来是这样

在我的Java类中,一个开始的任务是讲述一个简短的故事,使用扫描器从用户那里获取输入以选择一个部件并向前/向后

主类中代码的开头如下所示:

Scanner sc=新扫描仪(System.in);
System.out.println(“你想知道我早上的哪一部分?“日常工作”、“通勤”或“在学校”?”);
字符串部分=sc.next();
系统输出打印(故事(部分));
我尝试在一个单独的
公共静态字符串
类中构建一个开关,然后使用
System.out.print(故事(部分))返回它。看起来是这样的:

公共静态最终字符串故事(字符串部分){
开关(部分){
案例“常规”:
System.out.println(“我在…”醒来);
打破
案例“通勤”:
System.out.println(“我乘公共汽车…”);
打破
“在学校”案例:
System.out.println(“我和朋友出去玩”);
打破
案例“完成”:
System.out.println(“谢谢阅读”);
打破
违约:
System.out.println(“无法识别部件标题。请重试”);
打破
}
回归故事(部分);
虽然IDE没有显示任何错误,但当我运行代码时,输出是所选部分的多行,然后是关于
返回故事(部分)
行的错误消息

我只是对我应该如何完成这项任务,以及如何使用扫描仪多次调用切换结果以避免重复错误感到困惑。我不需要完整的答案,但一些关于如何完成这项任务或我做错了什么的指导会很有帮助

编辑:根据@Jb Nizet的建议,我将开关中的
System.out.println
替换为
return
,并删除了
return story(part);
,从而修复了递归问题


现在我剩下的问题是,我可以使用扫描仪多次调用主类中的同一开关/类吗?或者我应该创建多个新类,其中开关的大小写是“下一个”还是“上一个”?

当您收到错误时,最好显示它

我怀疑该错误可能是堆栈溢出错误(此站点以其命名),因为

回归故事(部分);

调用函数
public static final String story(字符串部分)
,然后才能完成。计算机需要记住完成它,所以他将它放在“堆栈”(计算机内存)上并开始一次又一次地执行函数,需要将其放在堆栈上,最终耗尽内存并抛出错误

快速修复:不要在函数内部调用函数。在函数外部使用循环,如:

while(true){   
  story(part); 
}

有趣的事实:在该函数中调用函数称为递归,这是一种快速而低效的编程方式。下次使用它时,请确保它不会重复太多次,并且始终有办法打破函数调用本身的循环。

您的方法在
返回故事(部分)中递归调用自身;
。你的意思是返回那些字符串而不是在开关中打印它们吗?@Kayaman是的,我需要返回字符串,但我正在尝试使用开关来确定应该返回哪个字符串。System.out.println()在屏幕上显示一个字符串。这与向方法调用方返回值非常不同。
return
执行此操作。将所有System.out.println()inside story()替换为
return
。并删除
返回故事(部分);