如何将指定Python小游戏代码用Java复现并解决NoSuchElementException报错
错误产生原因
- 错误的Scanner操作逻辑:你在每次循环结束时调用
input.close(),该方法执行时会直接关闭底层的System.in输入流,第二次循环再新建Scanner读取已关闭的输入流时,就会抛出NoSuchElementException。同时完全没有必要每次循环都新建Scanner对象,全局初始化一次即可。 - 字符串比较逻辑错误:Java中使用
!=比较字符串时,判断的是两个字符串对象的内存地址而非内容,即使用户输入了your name,input.next()返回的字符串对象和常量池中的your name地址也不相同,循环永远不会正常跳出,需要用equals方法比较字符串内容。 - 输入读取方法不匹配:Python的
input()会读取整行输入,而Java的input.next()只会读取到空格为止,行为和原Python逻辑不一致,应该用nextLine()方法匹配原逻辑。
正确复现Python功能的Java代码
import java.util.Scanner; public class sillyGame { public static void main(String[] args) { String name = ""; // 全局仅初始化一次Scanner Scanner input = new Scanner(System.in); while (!name.equals("your name")) { System.out.println("Please type your name."); // 读取整行输入,和Python input()行为对齐 name = input.nextLine(); } // 所有输入逻辑执行完毕后再关闭Scanner input.close(); System.out.println("Thank you!"); } }
内容的提问来源于stack exchange,提问作者Cristian Diaz
相关产品推荐
相关产品推荐

