Java中如何按序号动态创建并命名Cook类实例?
解决Java中动态创建按序号命名的Cook实例问题
嘿,我来帮你搞定这个问题!你遇到的核心问题是Java作为静态类型语言,没办法直接用字符串动态生成变量名——你已经把sb定义成StringBuilder对象了,自然不能再把它当成Cook类型的变量来用,这就是编译器报错的原因。
正确的实现思路:用集合存储动态创建的实例
与其纠结动态生成变量名,不如用一个**集合(比如Map或者List)**来保存所有的Cook实例。这样既可以通过序号关联对应的实例,还能方便后续查找、遍历所有厨师。
下面是修改后的完整代码,我会标注关键改动:
package kebabStore; import java.util.Scanner; import java.util.HashMap; import java.util.Map; public class NewCook { // 新增一个Map来存储所有Cook实例,键是"cook1"、"cook2"这样的字符串 private static Map<String, Cook> cookMap = new HashMap<>(); static Scanner scanner = new Scanner(System.in); public static void newcook () { Cook.numberofcooks++; System.out.println("Enter name new cook"); String newcookname = scanner.nextLine(); System.out.println("enter address new cook"); String newcookaddress = scanner.nextLine(); System.out.println("Enter PO Box new cook"); String newcookpobox = scanner.nextLine(); System.out.println("Enter town new cook?"); String newcooktown = scanner.nextLine(); System.out.println("Enter tax number new cook"); int newcooktaxnumber = scanner.nextInt(); // 这里先把scanner的换行符吃掉,避免下次nextLine()读到空字符串 scanner.nextLine(); // 生成实例的标识字符串 String cookKey = "cook" + Cook.numberofcooks; // 创建Cook实例并存入Map Cook newCook = new Cook(newcookname, newcookaddress, newcookpobox, newcooktown, newcooktaxnumber); cookMap.put(cookKey, newCook); System.out.println("A new cook has been hired " + newCook.getName() + ", living in " + newCook.getTown()); // 验证:输出Map里的所有厨师标识 System.out.println("当前所有厨师:" + cookMap.keySet()); } // 额外提供一个方法,方便通过标识获取Cook实例 public static Cook getCook(String cookKey) { return cookMap.get(cookKey); } }
关键改动说明:
- 替换静态变量为局部变量:你原来的
newcookname等都是静态变量,这会导致新创建的厨师信息覆盖旧的,改成方法内的局部变量更安全。 - 用
HashMap存储实例:cookMap的键是我们想要的“cook3”“cook4”这类字符串,值是对应的Cook实例,完美解决动态标识的需求。 - 处理Scanner的换行问题:调用
nextInt()后,输入流里会留下一个换行符,必须用nextLine()吃掉,否则下一次nextLine()会直接读到空字符串。 - 新增获取实例的方法:
getCook()方法可以让你通过标识(比如"cook3")快速找到对应的厨师实例。
为什么不能动态生成变量名?
Java是编译型静态语言,所有变量名在编译阶段就已经确定了,没办法在运行时通过字符串动态创建新的变量名。集合是处理这种动态实例管理的标准方案,不仅Java,其他静态语言也大多用这种思路解决类似问题。
内容的提问来源于stack exchange,提问作者Twannemannn
相关产品推荐
相关产品推荐

