1-13编程代码写完了,但是报错

1-13编程代码写完了,但是报错


    // 测试方法
    public static void main(String[] args) {
     //实例化对象,调用相关方法实现运行效果
     User one=new User("Lucy","123456");
     User two=new User("Mike","123456");
     one.info();
     System.out.println(one.info());
     two.info();
     System.out.println(two.info());
     System.out.println("============================");
    UserManager manage=new UserManager(User one,User two);
        
    }
}



public class User{
    //定义属性用户名、密码
    String user;
    String code;
    
    User(String user,String code){
        this.setUser(user);
        this.setCode(code);
        
    public void setUser(String user){
        this.user=user;    
    }    
    
    public String getUser(){
        return this.user;
    }
    
    public void setCode(String code){
        this.code=code;
    }
        
    public String getCode(){
        return this.code;
    }    
    }

    public String info(){
        String str="用户名:"+this.user+"\n密码:"+this.code;
        return str;
    }
    
    
    
}





public class UserManager{
    // 用户信息验证的方法
    public String checkUser(User one, User two) {
       // 判断用户名是否为空,是否一致
        if((one.user !=null) & (two.user !=null)){
            if((one.user).equals(two.user)){
                System.out.println("用户名一致");
            }else
                System.out.println("用户名不一致");
        }else
            System.out.println("用户名不能为空!");
        // 判断密码是否为空,是否一致
        if((one.code !=null) & (two.code !=null)){
            if((one.code).equals(two.code)){
                System.out.println("密码一致");
            }else
                System.out.println("密码不一致");
        }else
            System.out.println("密码不能为空!");
        
        
    }   
}  



要求:

        1、 设计构造函数实现对属性赋值

        2、 设置私有属性,get/set方法实现对属性的访问

        3、用户信息验证判断两个用户信息是否一致


PS: 可以通过equals()方法进行字符串内容的判断,如果内容相等返回值为tru

我感觉没问题啊,使用one.info();返回并且打印了one的信息,two的也是这样。然后实例化UserManager的对象,在构造参数里直接传参,但是各种各样的报错。



正在回答

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

3回答

1、首先,老师是希望同学可以按照老师帮同学找出的错误,请同学重新敲一下代码,只有不断的练习,亲手动手去敲代码,才能更好的掌握知识呦。

2、关于同学的第一个问题:

这里有两种方法有,如果按照同学的方法,就需需要去掉返回值,改成void,如果按照提示的,有返回值的,可以这样写:

package com.imooc;

public class UserManager {
	// 用户信息验证的方法
	public String checkUser(User one, User two) {
		// 判断用户名是否为空,是否一致
		String str = "";
		
		if ((one.user != null) | (two.user != null)) {
			if ((one.user).equals(two.user)) {
				str = "用户名一致";
				if ((one.code != null) | (two.code != null)) {
					if ((one.code).equals(two.code)) {
						str += "密码一致";
						return str;
					} else {
						str += "密码不一致";
						return str;
					}
				} else {
					str = "密码不能为空!";
					return str;
				}

			} else {
				str = "用户名不一致";
				return str;
			}

		} else {
			// 判断密码是否为空,是否一致
			str = "用户名不能为空";
			return str;
		}

	}
}

有返回值的情况下,就不需要写输出语句了。我们最后在测试方法中打印返回值的str就可以了。

这个里边就是,有返回值的方法,最后必须返回一个返回值类型的对象回去。

至于这个对象是什么,根据判断条件不同而返回的不同。并且,你要把密码的判断,放到用户名一致且不为空的判断里,如果用户名为空或者用户名不一致,我们根本就不去判断它的密码了,直接把字符串返回回去就可了。

如果按照同学写的写输出方法,就不要写返回值了,改成void.

3、是的,这里同学可以用| 或者||。只要有一个为空,就返回这个信息。

4、如果同学写成if (one.user.equals(two.user))不会报错,但是不建议这样写,这样写起来可读性不高,容易出错,建议同学还是括起来比较好。

5、他们是有交集的呦,这里的管理类中调用的是User,那为啥能拿来直接就用呢?这个是因为他们在同一个包下,如果不在同一个包下,就要通过导包的方式来引用了,因为是在一个包下,它就免了让你去导包这个过程了(在线编辑器中,默认他们是在一个包中的)

http://img1.sycdn.imooc.com//climg/5cbc1249000179e811460583.jpg

所以,要想调用这个checkUser方法,你首先给他它需要的类型的对象做参数的。

package com.imooc;

public class UserManager {
	// 用户信息验证的方法
	public String checkUser(User one, User two) {
		// 判断用户名是否为空,是否一致
		String str = "";
		
		if ((one.user != null) | (two.user != null)) {
			
			if ((one.user).equals(two.user)) {
				str = "用户名一致";
				if ((one.code != null) | (two.code != null)) {
					if ((one.code).equals(two.code)) {
						str += "密码一致";
						return str;
					} else {
						str += "密码不一致";
						return str;
					}
				} else {
					str = "密码不能为空!";
					return str;
				}

			} else {
				str = "用户名不一致";
				return str;
			}

		} else {
			// 判断密码是否为空,是否一致
			str = "用户名不能为空";
			return str;
		}

	}
}
package com.imooc;
public class User{
    //定义属性用户名、密码
    String user;
    String code;
    
    User(String user,String code){
        this.setUser(user);
        this.setCode(code);
    }
    public void setUser(String user){
        this.user=user;    
    }    
    
    public String getUser(){
        return this.user;
    }
    
    public void setCode(String code){
        this.code=code;
    }
        
    public String getCode(){
        return this.code;
    }    
    

    public String info(){
        String str="用户名:"+this.user+"\n密码:"+this.code;
        return str;
    }
    
    
    
}
package com.imooc;

public class Test {
	// 测试方法
    public static void main(String[] args) {
     //实例化对象,调用相关方法实现运行效果
     User one=new User("Lucy","123456");
     User two=new User("Mike","123456");
     one.info();
     System.out.println(one.info());
     two.info();
     System.out.println(two.info());
     System.out.println("============================");
    UserManager manage=new UserManager();
    String checkUser = manage.checkUser(one, two);
    System.out.println(checkUser);
    }
}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 鱼儿0001 提问者 #1
    谢谢老师,管理类的if-else多重嵌套看的人+_+, 我理解了一点,老师说当用户名为空或者不一致时,是没有必要继续核实密码的,所以你把对用户名和密码的核实放在了一起? 还有,我发现老师忘了在定义私有属性时,给用户名、密码加private: String user; String code;
    2019-04-21 15:30:55
  • 好帮手慕阿莹 回复 提问者 鱼儿0001 #2
    另外建议同学,初学阶段,if,else方法体中都写上大括号,避免混乱,写代码时,把格式写好,就不会太难了,另外感谢同学的建议,private不是必须要求加的,但还是感谢同学的建议,我们会反馈给相关工作人员的。祝学习愉快。
    2019-04-21 15:41:16
  • 鱼儿0001 提问者 回复 好帮手慕阿莹 #3
    老师,编程要求的第二条是: 设置私有属性,get/set方法实现对属性的访问。 这个要求写的很明显吧,要设置私有属性,难道这些代码不是老师你打的吗?
    2019-04-21 19:02:08
提问者 鱼儿0001 2019-04-21 11:47:43
重发一下,在回复区发的信息没有自动排行,不方便老师观看,这里重新发布。

我看了一下老师你发的代码,有几点疑问:

1、首先,管理类的方法,public String checkUser(User one,User two){}这是系统给的,要求有返回值,这并不是我写的。老师将String改为void。

2、  if((one.user !=null) & (two.user !=null)){           

            if((one.user).equals(two.user)){               

                    System.out.println("用户名一致");           

            }else               

                    System.out.println("用户名不一致");      

     }else           

        System.out.println("用户名不能为空!");

我对自己之前写的这部分代码有疑问,判断两个用户信息是否为空,使用逻辑运算符时,我应该使用或运算符  |   吧?也就是只要满足一个用户信息为空,就做出提醒?还有,判断用户信息是否一致,我使用大括号将将对象名.方法名给括起来了,如果我不括起来,写成了:if(one.user.equals(two.suer)),老师这会报错吗?

3、最后一个问题是:  UserManager manage=new UserManager(User one,User two);,这里我给不存在的带参构造方法传参。肯定错误。老师接下来是使用对象名.方法名:manage.checkUser(one,two)传参,老师,我不能理解的是,此编程有三个类,这里的操作都是在测试类,管理类和User类没有任何交集,系统是怎么认出来传的是是User类的对象one和two呢?

吃吃吃鱼的猫 2019-04-20 18:03:39

同学你好,修改代码如下图所示:

http://img1.sycdn.imooc.com//climg/5cbaed760001da7f07850801.jpg

http://img1.sycdn.imooc.com//climg/5cbaedd10001c20308120579.jpg

http://img1.sycdn.imooc.com//climg/5cbaee62000135d608790387.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,你以后能不能上传代码而不是截图,这样方便人观看和修改、收藏?谢谢
    2019-04-21 11:10:35
  • 提问者 鱼儿0001 #2
    老师你老是发截图,很不方便学习使用
    2019-04-21 11:11:49
  • 提问者 鱼儿0001 #3
    我看了一下老师你发的代码,有几点疑问: 1、首先,管理类的方法,public String checkUser(User one,User two){}这是系统给的,要求有返回值,这并不是我写的。老师将String改为void。 2、 if((one.user !=null) & (two.user !=null)){ if((one.user).equals(two.user)){ System.out.println("用户名一致"); }else System.out.println("用户名不一致"); }else System.out.println("用户名不能为空!"); 我对自己之前写的这部分代码有疑问,判断两个用户信息是否为空,使用逻辑运算符时,我应该使用或运算符 | 吧?也就是只要满足一个用户信息为空,就做出提醒?还有,判断用户信息是否一致,我使用大括号将将对象名.方法名给括起来了,如果我不括起来,写成了:if(one.user.equals(two.suer)),老师这会报错吗? 3、最后一个问题是: UserManager manage=new UserManager(User one,User two);,这里我给不存在的带参构造方法传参。肯定错误。老师接下来是使用对象名.方法名:manage.checkUser(one,two)传参,老师,我不能理解的是,此编程有三个类,这里的操作都是在测试类,管理类和User类没有任何交集,系统是怎么认出来传的是是User类的对象one和two呢?
    2019-04-21 11:44:11
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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