Java RPG开发中布尔值判定用户所选生物群系的实现问题
问题背景
开发RPG项目时,需通过布尔值判定用户通过Scanner输入选择的生物群系,但逻辑始终运行异常:编写的布尔返回判断方法运行时持续返回null,或是判定结果与所选生物群系完全相反,反转判断条件也无法解决问题。
涉及的原始代码如下:game.java
public boolean isPlains() { if (biome == "Plains") { return true; } else { return false; } } public boolean isTundra() { if (biome == "Tundra") { return true; } else { return false; } }
phase.java
public class phase extends game{ public void battle() { game gm = new game(); if (isPlains() == true) { System.out.println("Hello"); } else { System.out.println("Bye"); } } }
预期目标是正确调用game.java中的isPlains()、isTundra()方法,在phase.java的battle()方法中完成生物群系判定后输出对应内容。
问题原因
- 字符串比较逻辑错误:Java中
==比较的是两个对象的内存引用地址,不是字符串的实际内容。直接用==对比biome和字符串常量,哪怕文本完全一致,只要两个字符串不是堆内存中的同一个对象,判定结果就会为false,这是判定结果错位的核心原因。 - 实例使用逻辑混乱:
phase已经继承了game类,但battle()方法中额外创建了一个全新的game实例gm,这个新实例的biome属性从未被赋值(默认值为null);调用isPlains()时实际读取的是当前phase实例的biome属性,如果该属性没有提前存入用户输入的内容,自然会出现null值、判定完全失准的问题。 - 冗余判断写法:布尔方法的返回值本身就是布尔类型,额外写
== true属于完全多余的写法,不会影响逻辑但会降低代码可读性。
修复代码
修改game.java的判定方法
用字符串内容比较方法equals()替换==,将固定字符串常量放在方法调用方,避免biome为null时触发空指针异常,同时简化冗余的if-else写法:
public boolean isPlains() { return "Plains".equals(biome); } public boolean isTundra() { return "Tundra".equals(biome); }
修改phase.java的战斗逻辑
删除无用的额外game实例,确保在调用判定方法前,当前实例的biome属性已经被赋值为用户通过Scanner输入的内容,简化布尔判断写法:
public class phase extends game{ public void battle() { // 移除冗余代码 game gm = new game(); // 注意:调用battle()前必须给当前对象的biome属性赋值,例如: // Scanner sc = new Scanner(System.in); // this.biome = sc.nextLine().trim(); // trim()用来去掉用户输入首尾的多余空格 if (isPlains()) { System.out.println("Hello"); } else if (isTundra()) { // 此处可补充冻原群系对应的专属逻辑 System.out.println("Welcome to the tundra"); } else { System.out.println("Bye"); } } }
提示:获取Scanner输入时建议调用
trim()方法清除首尾空格、换行符,避免用户输入时误碰空格导致内容匹配失败。
内容的提问来源于stack exchange,提问作者thatOnePerson5
相关产品推荐
相关产品推荐

