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;
}
} |