Java报错:未声明变量getMembers,子类已定义相关方法仍报错的问题排查与用户输入修改实现方案
问题分析与解决
首先看你遇到的Undeclared variable: getMembers错误,这是个典型的语法问题:
- 在Main类的最后一行
JOptionPane.showMessageDialog(null,if2.getMembers);里,getMembers是方法,不是变量,调用方法必须加括号,也就是要写成if2.getMembers()。编译器看到你没加括号,会把它当成一个变量名,但你从未定义过叫getMembers的变量,所以直接报错。
除此之外,你的代码还有两处逻辑问题:
- Main里声明了
int members;但未初始化,直接调用if2.setMembers(members);的话,这个members是默认值0,完全没用上用户输入的amount值。 - 你已经通过构造方法
IdeellForening if2=new IdeellForening(namn, adress, amount);把用户输入的amount传给了成员变量,之后又调用setMembers传一个未初始化的变量,这不仅多余,还会覆盖掉正确的用户输入。
修正后的Main类代码
// 假设namn和adress已提前定义好 String namn = "示例协会"; String adress = "示例街道123号"; // 第一步:获取用户初始输入的成员数量 String sR4 = JOptionPane.showInputDialog(null, "How many members?", JOptionPane.QUESTION_MESSAGE); int amount = Integer.parseInt(sR4); // 用用户输入初始化对象 IdeellForening if2 = new IdeellForening(namn, adress, amount); // 第二步:实现用户修改输入的功能 String newMemberInput = JOptionPane.showInputDialog(null, "请输入修改后的成员数量:", JOptionPane.QUESTION_MESSAGE); int newMembers = Integer.parseInt(newMemberInput); if2.setMembers(newMembers); // 调用set方法更新成员数 // 正确调用get方法获取最新值并显示 JOptionPane.showMessageDialog(null, "当前成员数量为: " + if2.getMembers());
子类IdeellForening的优化建议
你的子类里重复定义了namn和adress变量,但这些变量应该已经在父类Forening中定义了,没必要重复声明——否则会覆盖父类的变量,导致super.toString()无法正确读取这些值。修改后的子类代码:
public class IdeellForening extends Forening { private int members; public IdeellForening(String namn, String adress, int members) { super(namn, adress); this.members = members; } // 如果registreringsar是父类变量,需通过super初始化 public IdeellForening(String namn, int members) { super(namn); // 假设父类有对应的构造方法 this.members = members; } public void setMembers(int members) { this.members = members; } public int getMembers() { return members; } public String toString() { // 调用父类的get方法获取adress(需父类提供对应getter) return "Antalet medlemmar är: " + members + " och adress: " + super.getAdress() + " " + super.toString(); } }
完整的用户修改流程说明
按照你的需求,完整逻辑应该是:
- 弹出对话框获取用户初始输入的成员数量
- 用该值初始化
IdeellForening对象 - 弹出第二个对话框让用户输入修改后的数量
- 调用
setMembers方法更新对象的成员数值 - 调用
getMembers方法获取最新值并弹窗展示
上面的修正代码已经包含了这个完整流程,你可以根据实际需求调整对话框的提示文案。
内容的提问来源于stack exchange,提问作者BananaSweden
相关产品推荐
相关产品推荐

