问题描述
/*用户类*/publicclassUser{privateintuId;privateStringuName;privateStringuPass;privateintgender;/*中间省略get/set方法*/publicvoidgetUserInfo(){System.out.println("====用户信息====");System.out.println("用户名:"+uName);System.out.println("用户密码:"+uPass);System.out.println("性别:"+UserDao.sex);}}/*接口*/publicinterfaceUserDao{Useruser=newUser();publicstaticfinalStringsex=user.getGender()==1?"男":"女";publicUserfindUser(StringuName);//根据用户名查找论坛用户publicintaddUser(Useruser);//增加论坛用户,返回增加个数publicintupdateUser(Useruser);//修改论坛用户的信息,返回修改个数}/*实现接口类*/publicclassUserDaoImplimplementsUserDao{privateUser[]users=newUser[10];/***增加用户*/publicintaddUser(Useruser){//TODOAuto-generatedmethodstubfor(inti=0;i<10;i++){if(users[i]==null){users[i]=user;users[i].setuId(i);return1;}}return0;}/***查找用户*/publicUserfindUser(StringuName){//TODOAuto-generatedmethodstubfor(inti=0;i<10;i++){if(users[i]!=null&&users[i].getuName().equals(uName)){returnusers[i];}}returnnull;}/***更新用户,用户id不可以更改*/publicintupdateUser(Useruser){//TODOAuto-generatedmethodstubfor(inti=0;i<10;i++){if(users[i]!=null&&users[i].getuName().equals(user.getuName())){users[i]=user;return1;}}return0;}}/*测试类*/publicclassTest{publicstaticvoidmain(String[]args){UserDaouserDao=newUserDaoImpl();Useruser1=newUser();user1.setuName("spiderman");user1.setuPass("spiderman");user1.setGender(2);userDao.addUser(user1);Useruser2=newUser();user2.setuName("superman");user2.setuPass("1");user2.setGender(1);userDao.addUser(user2);userDao.findUser("spiderman").getUserInfo();userDao.findUser("superman").getUserInfo();}}输出结果为:====用户信息====用户名:spiderman用户密码:spiderman性别:女====用户信息====用户名:superman用户密码:1性别:女请教,为什么性别判断错误?在接口中我做的判断有问题嘛?请指导下我该如做修改!!!为什么!!!谢谢!!!
解决方案
解决方案二:
maybebecauseit'sastaticvariable
解决方案三:
static&final
解决方案四:
引用1楼lds1ove的回复:
maybebecauseit'sastaticvariable
publicstaticfinalStringsex=user.getGender()==1?"男":"女";引用2楼lds1ove的回复:
static&final
你new第一个对象时对sex进行了初始化,而final修饰的sex不可再更改,所以一直都是2。。。
解决方案五:
那该如何解决呢??
解决方案六:
/*用户类*/publicclassUser{privateintuId;privateStringuName;privateStringuPass;privateintgender;/*中间省略get/set方法*/publicvoidgetUserInfo(){System.out.println("====用户信息====");System.out.println("用户名:"+uName);System.out.println("用户密码:"+uPass);//System.out.println("性别:"+UserDao.sex);UserDao.sex为啥性别要是别人的性别System.out.println("性别:"+(gender==1?"男":"女"));//判断自己是男是女
解决方案七:
updatebycorrectformat/*用户类*/publicclassUser{privateintuId;privateStringuName;privateStringuPass;privateintgender;/*中间省略get/set方法*/publicvoidgetUserInfo(){System.out.println("====用户信息====");System.out.println("用户名:"+uName);System.out.println("用户密码:"+uPass);//System.out.println("性别:"+UserDao.sex);UserDao.sex为啥性别要是别人的性别System.out.println("性别:"+(gender==1?"男":"女"));//判断自己是男是女
解决方案八:
修改User中的getUserInfo()方法publicvoidgetUserInfo(){System.out.println("====用户信息====");System.out.println("用户名:"+uName);System.out.println("用户密码:"+uPass);StringstrGender=this.gender==1?"男":"女";System.out.println("性别:"+strGender);}}
解决方案九:
用final修改的变量,从始至终不会变了
解决方案十:
该回复于2011-03-10 15:58:11被版主删除
解决方案十一:
UserDao接口设计得莫名其妙
解决方案十二:
接口赋值后就改不了了还是在类里自己判断性别publicvoidgetUserInfo(){System.out.println("====用户信息====");System.out.println("用户名:"+uName);System.out.println("用户密码:"+uPass);StringstrGender=this.gender==1?"男":"女";System.out.println("性别:"+strGender);}}
解决方案十三:
你那个接口设计得不好,我个人建议,接口里面不要记录数据接口中,如下代码Useruser=newUser();publicstaticfinalStringsex=user.getGender()==1?"男":"女";而User类中成员变量gender并未初始化,于是JAVA默认将其初始化为0,而接口中的sex又是常量,所以获取到的一直是女你的做法不是一种很好设计方法,不符合我们写程序过程中的设计,接口里面任何数据都不要记录,只是提供一些没有实现的方法。你的那个接口都可以叫做抽象类了。你最好把这几个概念弄懂
解决方案十四:
学习了,关于final修饰符很多新手都容易搞错的
解决方案十五:
你那个接口设计得不好,我个人建议,接口里面不要记录数据接口中,如下代码Useruser=newUser();publicstaticfinalStringsex=user.getGender()==1?"男":"女";而User类中成员变量gender并未初始化,于是JAVA默认将其初始化为0,而接口中的sex又是常量,所以获取到的一直是女你的做法不是一种很好设计方法,不符合我们写程序过程中的设计,接口里面任何数据都不要记录,只是提供一些没有实现的方法。你的那个接口都可以叫做抽象类了。你最好把这几个概念弄懂