A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© obvilion 中级黑马   /  2016-9-3 22:20  /  885 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2.  创建一个Person类,属性2个,分别是name和age,
定义一个String[] str = {"奶昔","加多宝","啤酒","白酒"};用来代表喝的饮料.
          a. 创建3个Person对象,从控制台获取属性值,输入格式为:姓名,年龄.(利用有参构造赋值)
          b. 将这3个person对象存入到Map集合中(map<人.要和的饮料>)
其中key是person对象,对应的value值需要随机(random)从str数组中获取
(如果person对象的年龄不满18岁则不能喝酒,也就是说如果该对象年龄小于18岁那么获取到的饮料是白酒或者啤酒则必须继续获取,直到获取到其他饮料为止.
         c. 将map中.所有信息写到当前项目Person_info.txt下(14)分
写入格式如下:
姓名:年龄,饮料
比如:
李四:15:奶昔
赵六:10:加多宝
张三:30:啤酒

继续上代码:
Person类;
[Java] 纯文本查看 复制代码
package bean;
public class Person {
	private String name;
	private int age;
	public Person() {}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
//toString和equals的重写反正是个人习惯,也不耗费什么时间,
//重写hashcode是为了让测试类在写出时顺序与录入时一致
	@Override
	public String toString() {
		return "[name=" + name + ", age=" + age + "]";
	}
	@Override
	public int hashCode() {
		return 1;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}

测试类;
[Java] 纯文本查看 复制代码
package code;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;

import bean.Person;
public class Tes02 {
	public static void main(String[] args) throws IOException {
		String[] str = {"奶昔","加多宝","啤酒","白酒"};
		Map<Person, String> map = new HashMap<>();
		for (int i = 0; i < 3; i++) {
			Person p = getPerson();
			map.put(p, str[getDrink(p)]);			
		}
		BufferedWriter bw = new BufferedWriter(new FileWriter("Person_info.txt"));
		for (Person key : map.keySet()) {
			bw.write(key.getName()+":"+key.getAge()+":"+map.get(key));
			bw.newLine();
		}
		bw.close();
	}
//这里题目没有要求考虑异常情况,所以就先这么写,二楼附上新的getPerson()和解决办法;
	@SuppressWarnings("resource")
	public static Person getPerson() {
		System.out.println("请录入人名和年龄以,分隔(格式为:\t姓名,年龄)");
		String input = new Scanner(System.in).nextLine();
		String[] s = input.split(",");
		return new Person(s[0],Integer.parseInt(s[1]));
	}
//使用递归调用直到未满十八岁者得到的饮料不为啤酒或白酒;三元运算符精简代码
	private static int getDrink(Person p) {
//匿名对象减少代码;
		int d = new Random().nextInt(4);
		return p.getAge()<18 && d > 1 ? getDrink(p): d;
	}
}

评分

参与人数 2黑马币 +30 收起 理由
378657357 + 10 很给力!
gaofengdage + 20 很给力!

查看全部评分

2 个回复

倒序浏览
本帖最后由 obvilion 于 2016-9-3 22:41 编辑

改进代码如下;
[Java] 纯文本查看 复制代码
        private static Scanner sc =new Scanner(System.in);
        private static Person getPerson() {
                System.out.print("请录入人名和年龄以,分隔(格式为:\t姓名,年龄):");
                String[] s;
                do {
                        s = sc.nextLine().split(",");                        
                } while (!isOK(s));
                return new Person(s[0],Integer.parseInt(s[1]));
        }
        private static boolean isOK(String[] s) {
                if (s.length!=2) {
//                        System.out.println("录入错误,请重输:");
                        return false;
                }
//                System.out.println(s[1].matches("\\d*")? "录入成功!" : "录入错误,请重输:");
                return s[1].matches("\\d*");
        }



撒泼打滚求打赏
回复 使用道具 举报
给组长来顶贴
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马