Java封装1-9的编程练习中checkUser问题

Java封装1-9的编程练习中checkUser问题

public String checkUser(User one,User two){//这个类如何理解使用,小括号里的两个参数为什么有空格?
在主程序中调用UserManager um=new UserManager();为什么会报错?
user1.equals(user2)这个用法对还是user1.equals()==user2.equals()

}


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

问题比较多,我们分别来看一下哈~~

1、第一个问题:这个类如何理解使用,小括号里的两个参数为什么有空格?

首先UserManager是类,checkUser是类中的一个方法,UserManager类是在Test类中,main方法执行的时候,比较两个用户信息是否一致的时候进行调用的。至于方法括号里面的空格,在方法定义时,括号中的参数描述格式就是:数据类型 参数名  类型和参数名中间必须加空格分隔。这点和基础语法中方法格式的定义是一样的。

2、在主程序中调用UserManager um=new UserManager();为什么会报错?

由于没有看到完整代码,此处不知道你是如何在主程序中调用的,如果只从实例化的角度来说,实例化语法本身没错,你可以把代码贴出来,看一下具体错误原因。

3、user1.equals(user2)这个用法对还是user1.equals()==user2.equals()

在checkUser这个方法中,是分别针对两个用户的用户名和密码进行比较。实现思路可以参考如下:

a) 获取 one 和 two 的 getName 方法的结果分别与 null 进行比较,判断两个用户的用户名是否为空

b) 获取 one 和 two 的 getName 方法的结果相互进行比较,判断用户名是否相同

密码的判断参考用户名的判断逻辑,至于字符串之间内容的比较,可以参考习题中提示的equals方法的使用。

如果解决了你的疑惑,欢迎采纳~~~

  • 混沌木头 提问者 #1
    也请老师解答下新的疑惑,谢谢!
    2017-03-26 22:43:52
  • 混沌木头 提问者 #2
    非常感谢!
    2017-03-27 10:52:28
喜欢做梦的鱼 2017-03-27 10:14:45

1、如果你是指checkUser方法中的参数列表中的User,那是你在User.java中定义的那个User类。就跟String一样,是一个类型,只是,String是系统定义好可以直接使用的类,而User是你自己定义好的类。

2、关于你代码中的问题:

关于User类:

a) 只需要定义一组用户名和密码的的属性,然后通过封装生成set、get方法。当需要两个用户的时候,只需要实例化两次即可,不用像你代码中写的定义两组,如果依照这种编码方式,当需要定义100个类对象,你要怎么写呢?

b) 注意编码规范,老师在课程中也反复强调,要注意命名规范,用户名可以起userName,不要随便起个名字,以后会加大程序维护的难度。

c) 密码建议写成String类型,更符合实际应用。

关于Test类:

a) main方法中需要实例化两个User对象进行比较,而不是一个对象赋值两次。所谓面向对象思想,跟现实生活中处理问题的方式和方法是类似的,所以,比较两个用户信息,一定需要两个对象之间比较。一个对象赋值两次是自己跟自己比较。。。

关于UserManager类:

a) checkUser方法的作用是进行两个对象之间的信息比对,也就是传入的User one 和 User two 两个对象之间的比对,所以方法中不需要额外创建us对象。

b) 因为传入方法的参数名是one two,所以方法中不能定义String类型的同名参数,一定会报错的。

c) one,two两个对象的信息比较需要分别比较用户名和密码,而相关的信息,则是通过“对象名.get*** ”的方式获取。

与null进行比对的时候可以直接使用类似:

String onePass=one.getPassword();
 if(onePass==null){
 }

null上面不能加双引号,null表示空对象,"null"表示字符串,内容是null。含义是不一样的。

两个用户信息之间的比对,类似用户名是否相同,可以使用类似:

String onePass=one.getPassword();
 String twoPass=two.getPassword();
 if(onePass.equals(twoPass)){
 }

此时,就是equals方法使用的地方了。这里不能直接用==比较字符串,如果要比较字符串的内容,必须使用equals,关字符串的==和equals的区别后面的课程中会详细讲解。

建议你把《方法》、《面向对象》、《封装》的课程再认真学习一下,不要光看,一定要跟着老师的讲解把代码敲一下,才能真正加深理解。

如果解决了你得疑惑,欢迎采纳~

  • 提问者 混沌木头 #1
    非常感谢!
    2017-03-27 10:53:12
提问者 混沌木头 2017-03-26 22:43:16
又生出新的疑惑了:
1、public String checkUser(User one,User two),checkUser中的User不是数据类型为什么不报错,如果写成这样
public void checkUser(String one,String two)我是可以理解的,这个User是User类名还是User类的构造函数呢?
是通过package的导入实现的吗?我的代码是凑巧成功的吗?
另外也没有用到equals方法,应该说equals例子解释的是某一个对象的值是否为true,如何使用这个方法来替换"=="呢?
test.java
public class Test{
    // 测试方法
	public static void main(String[] args) {
     //实例化对象,调用相关方法实现运行效果
     User us =new User("Lucy","Mike",123456,123456);
	    
	    System.out.println("用户名:"+us.getUser1());
	    
	    System.out.println("密码:"+us.getPassword1());
	   
	    System.out.println("用户名:"+us.getUser2());
	    
	    System.out.println("密码:"+us.getPassword2());
	    System.out.println("============");
	    UserManager um=new UserManager();
	    um.checkUser(us, us);
	}
}
User.java
public class User {
	//定义属性用户名、密码
    private String user1;
    private int password1;
    private String user2;
    private int password2;
    
    public User(String user1,String user2,int password1,int password2){
    	this.user1=user1;
    	this.user2=user2;
    	this.password1=password1;
    	this.password2=password2;
    }
    
    public String setUser1(){
        return user1;
    }
    public String getUser1(){
        return user1;
    }
    public int setPassword1(){
        return password1;
    }
    public int getPassword1(){
        return password1;
    }
     public String setUser2(){
        return user2;
    }
    public String getUser2(){
        return user2;
    }
    public int setPassword2(){
        return password2;
    }
    public int getPassword2(){
        return password2;
    }
}
UserManager.java
public class UserManager {
	 // 用户信息验证的方法
    public String checkUser(User one,User two) {
       // 判断用户名是否为空,是否一致
      User us=new User("Lucy","Mike",123456,123456);
      String one=us.getUser1();
      String two=us.getUser2();
        if(one!="Null"|two!="Null"){
        	
            if(one==two){
                System.out.println("用户名一致");
            }else{
                System.out.println("用户名不一致");
            }
        }else{
            System.out.println("用户名为空");
            
        }
        
    // 判断密码是否为空,是否一致
        int password1=us.getPassword1();
        int password2=us.getPassword2();
          if(password1!=0|password2!=0){
          	    System.out.println("密码一致");
              if(password1==password2){
                 
              }else{
                  System.out.println("密码不一致");
              }
          }else{
              System.out.println("密码为空");
          }
          return user1+user2;
    }

}


  • 1.因为是User类!User是类名。2.不用包的导入 也没有包导3.建议String 类型比较用equals,因为equals比较的是内容,==连接的话就得完全相同,包括了地址。String one=new String("15"); String two=new String("15"); 你可以试试这2个 用==比较是false 用equals比较是true。
    2017-04-16 15:11:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师