该题有两个思路:
1:定义三个数组,一一对应,一个放入名字,一个放入性别,最后一个进行标记,然后进行判断;
2:定义一个类,相当于c语言里面的结构体的方式,进行判断;
因为刚开始博主接触的是c所以这里习惯用结构体进行判断,相对麻烦一些,但可以熟练面向对象的操作,如果想试一下第一种方式的,可以在下面试一下。
import java.util.Scanner;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
ArrayList<Students> student=new ArrayList<>();//新建一个关于类的集合,方便存储
int a=sc.nextInt();
for(int i=0;i<a;i++){
int gender=sc.nextInt();
String name=sc.next();
Students s=new Students(gender,name,true);//true要标记一下,以防止同学多次分小组
student.add(s);//把这个对象放入集合中
}
for(int i=0;i<student.size()/2;i++){//因为题意说每个男女都能一一对应,所以只用循环遍历前半个集合便行
for(int j=student.size()-1;j>i;j--){//倒着遍历
if(student.get(i).getGender()!=student.get(j).getGender()&&student.get(j).getFlag()){//判断性别是否不同,并且是否已经被分配过
System.out.println(student.get(i).getName()+" "+student.get(j).getName());
student.get(j).setFlag(false);//分配过后,就把该对象标记一下
break;//结束当前子循环,进行下一个同学的分配
}
}
}
}
}
class Students{//定义一个同学的类
private String name;//名字变量
private int gender;//性别变量
private boolean flag;//标记
public Students(){
}
public Students(int gender,String name,boolean flag){
this.name=name;
this.gender=gender;
this.flag=flag;
}
public void setName(String name){
this.name=name;
}
public void setGender(int gender){
this.gender=gender;
}
public String getName(){
return name;
}
public int getGender(){
return gender;
}
public boolean getFlag(){
return flag;
}
public void setFlag(boolean flag){
this.flag=flag;
}
}
因为博主也刚接触Java,所以有什么不足的地方,请大家帮忙指出。