2-7 jmu-java-m02-综合:使用列表管理个人信息

该博客介绍了如何在Java中使用列表来管理个人信息。通过输入指定格式的数据,将姓为特定值的人员信息存储到列表中,并进一步筛选出名字匹配的记录。接着,按成绩对筛选后的记录进行降序排序并展示。文章提供了三种不同的实现方法,包括substring、split和Collections.swap的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2-7 jmu-java-m02-综合:使用列表管理个人信息 (20分)
输入字符串n-x-y,其中n代表数量,x代表姓,y代表名。

然后输入n个人的信息,每一行代表一个人的信息。

每行字符串格式为"姓-名-成绩-编号",以-作为分隔符。

并将所有姓为x的字符串放入数组列表list1中。 输出list1
进一步的将list1中的中名字为y(忽略大小写)的字符串取出放入list2中。 输出list2

然后对list2的字符串按成绩进行降序排列并输出。

输入格式:
第一行输入n-x-y

下面输入n行字符串,格式为"姓-名-成绩-编号"

输出格式:
格式化输出的多个人的信息

输入样例:
8-zhang-san
zhang-san-99-1
li-si-70-2
zhang-San-65-3
zhang-fei-70-4
zhang-SAn-101-5
Li-si-99-6
li-SI-80-7
Zhang-san-56-8

输出样例:
[zhang-san-99-1, zhang-San-65-3, zhang-fei-70-4, zhang-SAn-101-5]
[zhang-san-99-1, zhang-San-65-3, zhang-SAn-101-5]
[zhang-SAn-101-5, zhang-san-99-1, zhang-San-65-3]

方法一:超级麻烦,substring用法

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Test01 {
		
	public static void main(String[] args) {
			List<String> List1 = new ArrayList<>();
			List<String> List2 = new ArrayList<>();
			List<String> List3 = new ArrayList<>();
			Scanner sc = new Scanner(System.in);
		    
			String person = sc.next();
		    int i =person.indexOf('-');
			int j =person.lastIndexOf('-');
	
			int n =Integer.parseInt(person.substring(0,i));
			String x = person.substring(i+1,j);//提取 beginindex 和 endindex 之间的字符串部分(左闭右开区间)
			String y =person.substring(j+1);//提取从位置索引开始到结束的字符串
			for(int k=0;k<n;k++)
			{
				String student=sc.next();
				int l =student.indexOf('-');
				int m =student.indexOf('-',l+1);//从l开始'-'第一次出现的位置
				if(student.substring(0,l).equals(x))
				{
					List1.add(student);
					if(student.substring(l+1,m).equalsIgnoreCase(y))
					{
						List2.add(student);
					}
				}
				
			}
			System.out.println(List1);
			System.out.println(List2);
			//排序。。。
			int []achievement=new int[List2.size()];
			for(int w=0;w<List2.size();w++)
			{
				String element = List2.get(w);//得到下表为w的元素
				int o =element.indexOf('-',element.indexOf('-')+1);
				int p =element.lastIndexOf('-');
				int result=Integer.parseInt(element.substring(o+1,p));
				achievement[w]=result;
			}
			//Arrays.sort(achievement);这个不得行
			//冒泡排序
			int len=achievement.length;
	        int ii,jj,temp;
	        for(ii=0;ii<len-1;ii++)                   //比较n-1次(第一次循环表示趟数)
	        {   
	                for(jj=0;jj<len-ii-1;jj++)              // 最后一次比较a[n-i-1]与a[n-i-2]   (第二次循环表示比较次数 )
	                {   
	                        if(achievement[jj]<achievement[jj+1])
	                        {   
	                                temp = achievement[jj+1];
	                                achievement[jj+1] = achievement[jj];
	                                achievement[jj] = temp;
	                        }
	                }
	        }
	        //
			String[]str= new String [achievement.length];
			for(int r=0;r<achievement.length;r++)
			{
				str[r]= Integer.toString(achievement[r]);
			}
			int count=0;
			for(int r=0;r<str.length;r++)
			{
				for(int w=0;w<List2.size();w++)
				{	
					String element = List2.get(w);//得到下表为w的元素
					if(element.contains(str[r]))
					{
						count++;
						if(count==1)
						{
							System.out.print("["+element+",");
						}
						else if(count==str.length)
						{
							System.out.print(" "+element+"]");
						}
						else
							{
								System.out.print(" "+element+",");
							}
					}
					
				}
		
			}
			
			
		}

}

方法二:相对简单,split用法,冒泡排序


import java.util.*;

public class Test09 {
	public static void main(String[] args) {
		List<String> List1 = new ArrayList<>();
		List<String> List2 = new ArrayList<>();
		List<String> List3 = new ArrayList<>();
		Scanner sc = new Scanner(System.in);
		String person = sc.next();
		String a[] = person.split("-");//分割
		int n =Integer.parseInt(a[0]);//字符串转成整数
		for(int i=0;i<n;i++)
		{
			String studen = sc.next();
			String b[]=studen.split("-");
			if(b[0].equals(a[1]))
			{
				List1.add(studen);
				if(b[1].equalsIgnoreCase(a[2]))
				{
					List2.add(studen);
				}
			}
		}
		System.out.println(List1);
		System.out.println(List2);
		int[] grade=new int [List2.size()];
		for(int j=0;j<List2.size();j++) 
		{
			String c[] = ((String)List2.get(j)).split("-");
			grade[j] =Integer.parseInt(c[2]);
		}
		//冒泡排序
				int len=grade.length;
		        int i,j,temp;
		        for(i=0;i<len-1;i++)                   //比较n-1次(第一次循环表示趟数)
		        {   
		                for(j=0;j<len-i-1;j++)              // 最后一次比较a[n-i-1]与a[n-i-2]   (第二次循环表示比较次数 )
		                {   
		                        if(grade[j]<grade[j+1])
		                        {   
		                                temp = grade[j+1];
		                                grade[j+1] = grade[j];
		                                grade[j] = temp;
		                        }
		                }
		        }
		//
		        
		for(int k=0;k<grade.length;k++)
			{	
				for(int m=0;m<List2.size();m++) 
				{
						String c[] = ((String)List2.get(m)).split("-");
						int result =Integer.parseInt(c[2]);
						if(result==grade[k])
						{
							List3.add((String)List2.get(m));
							break;
						}
				}
			
		     }
		
		System.out.println(List3);
		
		
	}
	
}

方法三:更简单一点,Collections.swap的用法

import java.util.*;

public class Test09 {
	public static void main(String[] args) {
		List<String> List1 = new ArrayList<>();
		List<String> List2 = new ArrayList<>();
	
		Scanner sc = new Scanner(System.in);
		String person = sc.next();
		String a[] = person.split("-");//分割
		int n =Integer.parseInt(a[0]);//字符串转成整数
		for(int i=0;i<n;i++)
		{
			String studen = sc.next();
			String b[]=studen.split("-");
			if(b[0].equals(a[1]))
			{
				List1.add(studen);
				if(b[1].equalsIgnoreCase(a[2]))
				{
					List2.add(studen);
				}
			}
		}
		System.out.println(List1);
		System.out.println(List2);
		int[] grade=new int [List2.size()];
		for(int j=0;j<List2.size();j++) 
		{
			String c[] = ((String)List2.get(j)).split("-");
			grade[j] =Integer.parseInt(c[2]);
		}
		
		for(int i=0;i<List2.size()-1;i++)
		{
			for(int j=i+1;j<List2.size();j++)
			{
				if(grade[i]<grade[j])
				{
					Collections.swap(List2, i, j);
					int t=grade[i];
					grade[i]=grade[j];
					grade[j]=t;
				}
			}
		}
		System.out.println(List2);
		
		
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值