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