package exec;
import java.util.ArrayList;
import java.util.Scanner;
import javax.print.DocFlavor.INPUT_STREAM;
/**
问题描述
新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。
其中,姓名用长度不超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的仅由数字构成的字符串表示,性别用一个大写字符‘F’或‘M’表示。
任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。给出m对两人的信息(姓名或学号),判断他们是否能共舞。
两人能共舞的充要条件为两人性别相异。
输入
第一行一个整数n(2<=n<=1000),表示学生人数。接下来的n行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。
之后的一行是一个整数m(1<=m<=1000),表示询问的数目。接着的m行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。
输出
对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大写字母‘N’。
样例输入
4
John 10 M
Jack 11 M
Kate 20 F
Jim 21 M
3
John 11
20 Jack
Jim Jack
样例输出
N
Y
N
* @author Vivinia
*
* 2018年2月4日
*/
public class A {
static ArrayList<Student> list;
public static void main(String[] args) {
list=new ArrayList<Student>(); //存储学生信息
ArrayList<OneTwo> ot=new ArrayList<OneTwo>(); //存储配对信息
Scanner input=new Scanner(System.in);
int n=input.nextInt();
for(int i=0;i<n;i++) {
String name=input.next();
String sno=input.next();
String sex=input.next();
list.add(new Student(name,sno,sex));
}
int m=input.nextInt();
for(int i=0;i<m;i++) {
String one=input.next();
String two=input.next();
ot.add(new OneTwo(one, two));
}
input.close();
for(int i=0;i<ot.size();i++) { //将配对列表信息取出
String one=ot.get(i).getOne();
String two=ot.get(i).getTwo();
if(Character.isDigit(one.charAt(0))&&Character.isDigit(two.charAt(0))) //两个都是学号
judge(one,two,1);
else if(!Character.isDigit(one.charAt(0))&&Character.isDigit(two.charAt(0))) //one是姓名,two是学号
judge(one,two,2);
else if(Character.isDigit(one.charAt(0))&&!Character.isDigit(two.charAt(0))) //one是学号,two是姓名
judge(one,two,3);
else //都是姓名
judge(one,two,4);
}
}
private static void judge(String one, String two,int i) {
int oi=0,ti=0; //两个信息对应的下标
if(i==1) { //两个都是学号
for(int j=0;j<list.size();j++) {
if(list.get(j).getSno().equals(one))
oi=j;
if(list.get(j).getSno().equals(two))
ti=j;
}
}
else if(i==2) { //one是姓名,two是学号
for(int j=0;j<list.size();j++) {
if(list.get(j).getName().equals(one))
oi=j;
else if(list.get(j).getSno().equals(two))
ti=j;
}
}
else if(i==3) { //one是学号,two是姓名
for(int j=0;j<list.size();j++) {
if(list.get(j).getSno().equals(one))
oi=j;
else if(list.get(j).getName().equals(two))
ti=j;
}
}
else { //都是姓名
for(int j=0;j<list.size();j++) {
if(list.get(j).getName().equals(one))
oi=j;
else if(list.get(j).getName().equals(two))
ti=j;
}
}
if(!list.get(oi).getSex().equals(list.get(ti).getSex())) //如果性别不一样
System.out.println("Y");
else
System.out.println("N");
}
}
class Student{
String name;
String sno;
String sex;
public Student(String name, String sno, String sex) {
super();
this.name = name;
this.sno = sno;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
class OneTwo{
String one;
String two;
public OneTwo(String one, String two) {
super();
this.one = one;
this.two = two;
}
public String getOne() {
return one;
}
public void setOne(String one) {
this.one = one;
}
public String getTwo() {
return two;
}
public void setTwo(String two) {
this.two = two;
}
}
感觉用ArrayList挺方便的,就是需要创建类,会使代码过长。只能想简单的思路,所以程序看起来有点臃肿,T_T