如何用String类型实现if/else判断,替换整数输入调用指定方法?
问题分析与解决方案
嘿,这问题我熟!你踩了Java字符串操作里两个常见的小坑,我给你一步步捋清楚:
问题1:Scanner没有nextString()方法
你写的navigate.nextString()是不存在的API哦!要获取用户输入的字符串,应该用navigate.next()(适合获取单个单词,比如"shop""inn"这类)或者navigate.nextLine()(获取整行输入),这里用next()就足够了。
问题2:字符串内容比较不能用==
在Java里,==比较的是两个字符串对象的内存地址,而不是实际内容。哪怕两个字符串文字一模一样,只要是不同的对象,==就会返回false。要比较字符串的内容,必须用equals()方法;如果想让程序更友好(比如用户输入"Shop""INN"也能识别),可以用equalsIgnoreCase()忽略大小写。
修正后的完整代码
import java.util.*; public class ShopTest { public static Scanner navigate = new Scanner(System.in); public static void main(String[] args) { System.out.println("Where to?\n Shop (type 'shop')\n Inn (type 'inn')"); // 修正:用next()获取字符串输入 String a = navigate.next(); // 修正:用equalsIgnoreCase()比较内容,兼容大小写输入 if (a.equalsIgnoreCase("shop")) Shop(); else if (a.equalsIgnoreCase("inn")) Inn(); else { // 新增非法输入提示,提升交互体验 System.out.println("Sorry, I don't recognize that place!"); } } public static void Shop() { System.out.println("Welcome to my shop\nWould you like to see my wares?"); } public static void Inn() { System.out.println("**You enter the inn and approach the barkeep**\nHow can I help you?"); } }
额外小建议
按照Java编码规范,方法名应该用小驼峰命名,比如把Shop()改成shop()、Inn()改成inn()(类名才用大驼峰),这样代码会更规范易读~
内容的提问来源于stack exchange,提问作者Alan Mc Gillivray
相关产品推荐
相关产品推荐

