如何解决Java重复局部变量及String无法转换为自定义Pelanggan类的报错?
问题原因说明
- 第一个报错
Duplicate local variable user:同一个方法作用域内不允许声明两个同名的局部变量,你先后声明了String user和Pelanggan user两个同名变量,违反了Java语法规则。 - 第二个报错
Type mismatch: cannot convert from String to Pelanggan:Scanner.nextLine()返回的是String类型的对象,不能直接赋值给自定义的Pelanggan类型的变量,两者类型不兼容。
修复方案
首先需要在你的自定义Pelanggan类中定义存储用户名的属性,以及对应的赋值入口,参考定义如下:
public class Pelanggan { // 存储用户名的属性 private String name; // 方案A配套:添加带用户名参数的构造方法 public Pelanggan(String name) { this.name = name; } // 方案B配套:添加name属性的setter方法 public void setName(String name) { this.name = name; } // 可选添加getter方法,方便后续读取用户名 public String getName() { return name; } }
方案A:使用带参构造方法初始化实例
public static void main(String[] args) throws Exception { System.out.println("Hi, Welcome!"); Scanner inpt = new Scanner(System.in); System.out.print("What can I call u? : "); // 单独声明变量存储输入的用户名,不和Pelanggan实例同名 String userName = inpt.nextLine(); // 构造实例时直接传入用户名完成赋值 Pelanggan user = new Pelanggan(userName); }
方案B:使用setter方法给属性赋值
public static void main(String[] args) throws Exception { System.out.println("Hi, Welcome!"); Scanner inpt = new Scanner(System.in); System.out.print("What can I call u? : "); String userName = inpt.nextLine(); Pelanggan user = new Pelanggan(); // 调用setter方法给实例的name属性赋值 user.setName(userName); }
内容的提问来源于stack exchange,提问作者Glaceon Comfey
相关产品推荐
相关产品推荐

