diff --git a/work1/1123688216/AnimalShop/Animal.java b/work1/1123688216/AnimalShop/Animal.java new file mode 100644 index 00000000..ba3efdad --- /dev/null +++ b/work1/1123688216/AnimalShop/Animal.java @@ -0,0 +1,59 @@ + +public abstract class Animal { + protected String name; + protected int age; + protected String gender; + protected double cost;//成本 + protected double price;//售价 + + + public Animal(String name, double cost, String gender, int age) { + this.name = name; + this.cost = cost; + this.gender = gender; + this.age = age; + } + + public Animal(){} + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getCost() { + return cost; + } + + public void setCost(double cost) { + this.cost = cost; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public abstract String toString(); + +} diff --git a/work1/1123688216/AnimalShop/AnimalShop.java b/work1/1123688216/AnimalShop/AnimalShop.java new file mode 100644 index 00000000..b824fb63 --- /dev/null +++ b/work1/1123688216/AnimalShop/AnimalShop.java @@ -0,0 +1,5 @@ +public interface AnimalShop { + void buyNewAnimal(Animal animal); + void treatCustomer(Customer customer); + void outOfBusiness(); +} diff --git a/work1/1123688216/AnimalShop/Cat.java b/work1/1123688216/AnimalShop/Cat.java new file mode 100644 index 00000000..08647276 --- /dev/null +++ b/work1/1123688216/AnimalShop/Cat.java @@ -0,0 +1,12 @@ +public class Cat extends Animal{ + protected boolean isVaccineInjected;//是否打过疫苗 + public Cat(String name, double cost, String gender, int age,boolean isVaccineInjected){ + super(name,cost,gender,age); + this.isVaccineInjected = isVaccineInjected; + } + + @Override + public String toString() { + return "这是一只猫,名字叫"+this.name+",价格为:"+this.cost+",性别为:"+this.gender+",年龄为:"+this.age+",是否打过疫苗:"+this.isVaccineInjected; + } +} diff --git a/work1/1123688216/AnimalShop/ChineseRuralDog.java b/work1/1123688216/AnimalShop/ChineseRuralDog.java new file mode 100644 index 00000000..a96bb9e9 --- /dev/null +++ b/work1/1123688216/AnimalShop/ChineseRuralDog.java @@ -0,0 +1,12 @@ +public class ChineseRuralDog extends Animal{ + protected boolean isVaccineInjected;//是否打过疫苗 + public ChineseRuralDog(String name, double cost, String gender, int age,boolean isVaccineInjected){ + super(name,cost,gender,age); + this.isVaccineInjected = isVaccineInjected; + } + + @Override + public String toString() { + return "这是一只中华田园犬,名字叫"+this.name+",价格为:"+this.cost+",性别为:"+this.gender+",年龄为:"+this.age+",是否打过疫苗:"+this.isVaccineInjected; + } +} diff --git a/work1/1123688216/AnimalShop/Customer.java b/work1/1123688216/AnimalShop/Customer.java new file mode 100644 index 00000000..21c00d61 --- /dev/null +++ b/work1/1123688216/AnimalShop/Customer.java @@ -0,0 +1,43 @@ +import java.time.LocalDate; + +public class Customer { + protected String name; + protected int visitCount;//到店次数 + protected LocalDate lastestVisitTime;//最新到店时间 + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LocalDate getLastestVisitTime() { + return lastestVisitTime; + } + + public void setLastestVisitTime(LocalDate lastestVisitTime) { + this.lastestVisitTime = lastestVisitTime; + } + + public int getVisitCount() { + return visitCount; + } + + public void setVisitCount(int visitCount) { + this.visitCount = visitCount; + } + + public Customer(String name) { + this.name = name; + this.visitCount = 0; + } + public Customer(){}; + + @Override + public String toString() { + return "姓名:"+this.name+",来店次数:"+this.visitCount+",最新一次来过的时间为"+this.lastestVisitTime; + } +} diff --git a/work1/1123688216/AnimalShop/Exception/AnimalNotFoundException.java b/work1/1123688216/AnimalShop/Exception/AnimalNotFoundException.java new file mode 100644 index 00000000..2e0ba2c9 --- /dev/null +++ b/work1/1123688216/AnimalShop/Exception/AnimalNotFoundException.java @@ -0,0 +1,10 @@ +package Exception; + +public class AnimalNotFoundException extends RuntimeException{ + public AnimalNotFoundException(String message) { + super(message); + } + public AnimalNotFoundException() { + super("店里目前没有宠物了,请下次再来"); + } +} diff --git a/work1/1123688216/AnimalShop/Exception/InsufficientBalanceException.java b/work1/1123688216/AnimalShop/Exception/InsufficientBalanceException.java new file mode 100644 index 00000000..f1999c74 --- /dev/null +++ b/work1/1123688216/AnimalShop/Exception/InsufficientBalanceException.java @@ -0,0 +1,13 @@ +package Exception; + +public class InsufficientBalanceException extends RuntimeException{ + + public InsufficientBalanceException(String message) { + super(message); + + } + public InsufficientBalanceException() { + super("余额不足,无法购买该动物"); + + } +} diff --git a/work1/1123688216/AnimalShop/MutilThread.java b/work1/1123688216/AnimalShop/MutilThread.java new file mode 100644 index 00000000..e2ff74d6 --- /dev/null +++ b/work1/1123688216/AnimalShop/MutilThread.java @@ -0,0 +1,61 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +public class MutilThread implements Runnable{ + private final int myTurn; + private final int otherTurn; + private final ArrayList arr; + public MutilThread(ArrayList arr,int myTurn,int otherTurn) { + this.arr = arr; + this.myTurn=myTurn; + this.otherTurn = otherTurn; + } + @Override + public void run() { + for(int number:this.arr){ + synchronized (AlternatingState.Lock) { + while (AlternatingState.currentTurn != this.myTurn) { + try { + AlternatingState.Lock.wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + System.out.print(number + ","); + AlternatingState.currentTurn = otherTurn; + AlternatingState.Lock.notifyAll(); + } + } + } + public static void main(String[] args) { + System.out.println("请输入第一个数组中的元素,用','隔开"); + Scanner sc = new Scanner(System.in); + String numString = sc.nextLine(); + List numList; + numList = Arrays.stream(numString.split(",")) + .map(Integer::parseInt) + .toList(); + ArrayList arr1 = new ArrayList<>(numList); + + System.out.println("请输入第二个数组中的元素,用','隔开"); + sc = new Scanner(System.in); + numString = sc.nextLine(); + + numList = Arrays.stream(numString.split(",")) + .map(Integer::parseInt) + .toList(); + ArrayList arr2 = new ArrayList<>(numList); + //两个线程创建,需要设置锁来进行交替运行 + Thread thread1 = new Thread(new MutilThread(arr1,1,2),"thread1"); + Thread thread2 = new Thread(new MutilThread(arr2,2,1),"thread2"); + thread1.start(); + thread2.start(); + } +} + +class AlternatingState{ + public static final Object Lock = new Object(); + public static int currentTurn =1;//表示当前哪个线程拥有执行权 +} diff --git a/work1/1123688216/AnimalShop/MyAnimalShop.java b/work1/1123688216/AnimalShop/MyAnimalShop.java new file mode 100644 index 00000000..07dc30a7 --- /dev/null +++ b/work1/1123688216/AnimalShop/MyAnimalShop.java @@ -0,0 +1,107 @@ +import java.io.FilterOutputStream; +import java.time.LocalDate; +import java.util.*; + +import Exception.InsufficientBalanceException; +import Exception.AnimalNotFoundException; +public class MyAnimalShop implements AnimalShop{ + protected double balance;//余额 + protected ArrayList animalsList; + protected Set customersList; + protected double profit;//当天利润 + public MyAnimalShop(double balance) { + + this.balance = balance; + this.profit = 0; + this.animalsList=new ArrayList<>(); + this.customersList=new HashSet<>(); + } + + @Override + public void buyNewAnimal(Animal animal) { + if(animal.cost>balance){ + throw new InsufficientBalanceException(); + }else{ + animal.setPrice(animal.getCost()*1.5);//宠物的定价为成本的1.5倍 + this.animalsList.add(animal); + this.balance -= animal.cost; + System.out.println("购买了"+animal.name+",当前店铺余额还剩下:"+this.balance); + } + } + + @Override + public void treatCustomer(Customer customer) { + if(customer.getVisitCount()==0){ + System.out.println("注意注意!!该客户是首次光临本店"); + } + else{ + System.out.println("当前客户的姓名为:"+customer.getName()+",来过店里"+customer.getVisitCount()+"次,上次到访日期为:"+customer.getLastestVisitTime()); + } + customer.setVisitCount(customer.getVisitCount()+1); + customer.setLastestVisitTime(LocalDate.now()); + this.customersList.add(customer); + boolean success = false;//用来确认客户是否继续购买宠物。 + System.out.println("欢迎光临,请问需要买什么宠物?"); + while(!success){ + try{ + if(this.animalsList.isEmpty()){ + success=true; + throw new AnimalNotFoundException(); + + } + System.out.print("我们这边的动物有:"); + for(int i=0;i=animalsList.size()){ + throw new IndexOutOfBoundsException("序号"+number+"不存在,请重新输入"); + } + + System.out.println("请确定要购买的宠物信息,确认购买请输入1,其他任意按键取消购买"); + System.out.println(this.animalsList.get(number).toString()); + int affirmNumber = sc.nextInt(); + if(affirmNumber==1){ + System.out.println("恭喜您购买宠物成功"); + Animal animal = this.animalsList.get(number); + this.profit +=animal.price-animal.cost;//计算利润 + this.balance +=animal.price; + this.animalsList.remove(number);//购买的宠物从宠物列表中移除 + } + else { + System.out.println("取消购买"); + } + System.out.println("如果你需要继续购买请按1,其他任意按键取消购买"); + int continueNumber = sc.nextInt(); + if(continueNumber==1){ + success=false; + } + else { + success=true; + } + }catch(AnimalNotFoundException e){ + System.err.println(e.getMessage()); + }catch(IndexOutOfBoundsException e){ + System.err.println(e.getMessage()); + }catch(InputMismatchException e){ + System.err.println("输入格式有误,请单独输入一个数字"); + } + + } + System.out.println("欢迎下次光临"); + } + + @Override + public void outOfBusiness() { + for(Customer customer:this.customersList){ + if(customer.lastestVisitTime.equals(LocalDate.now())){ + System.out.println("客人信息:"+customer.toString()); + } + } + System.out.println("今天日期为"+LocalDate.now()+"利润为:"+this.profit); + this.profit = 0; + } +} diff --git a/work1/1123688216/AnimalShop/Regex.java b/work1/1123688216/AnimalShop/Regex.java new file mode 100644 index 00000000..5a1bba4f --- /dev/null +++ b/work1/1123688216/AnimalShop/Regex.java @@ -0,0 +1,24 @@ +import java.util.Scanner; +import java.util.regex.Pattern; + +public class Regex { + //正则学习书籍:https://github.com/ziishaned/learn-regex/tree/master/translations + //合法邮箱格式:本地部分+@+域名部分+.+顶级域名 + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.println("请输入待检测的邮箱"); + String email = sc.nextLine(); + if(isVaildEmail(email)){ + System.out.println("该邮箱格式合格"); + } + else{ + System.out.println("该邮箱格式不合格"); + } + } + //开头部分。匹配 1 个或多个字母、数字、_、- 或 +。保证了邮箱不会以.开头。同时确保不会出现连续的‘.’号 + public static boolean isVaildEmail(String email){ + String regex= "^[a-zA-Z0-9_\\-\\+]+(\\.[a-zA-Z0-9_\\-\\+]+)*@[a-zA-Z0-9\\-]+(\\.[a-zA-Z0-9\\-]+)*\\.[a-zA-Z]{2,}$"; + return Pattern.matches(regex,email); + } +} diff --git a/work1/1123688216/AnimalShop/Test.java b/work1/1123688216/AnimalShop/Test.java new file mode 100644 index 00000000..529d6ff2 --- /dev/null +++ b/work1/1123688216/AnimalShop/Test.java @@ -0,0 +1,94 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +import Exception.InsufficientBalanceException; +public class Test { + public static void main(String[] args) { + //初始化小动物 + ArrayList initAnimalsList =initAnimals(); + //创建商店 + MyAnimalShop myAnimalShop = new MyAnimalShop(1000);//以1000块作为开店启动资金 + //购买动物 + showAndBuyAnimal(initAnimalsList,myAnimalShop); + + pause(); + + //创建顾客 + Customer customer_1 = new Customer("顾客1"); + + Customer customer_2 = new Customer("顾客2"); + + //招待顾客 + myAnimalShop.treatCustomer(customer_1); + //第二次到访测试 + pause(); + myAnimalShop.treatCustomer(customer_1); + //不同的新客人到来 + pause(); + myAnimalShop.treatCustomer(customer_2); + //歇业 + pause(); + myAnimalShop.outOfBusiness(); + } + public static ArrayList initAnimals(){ + ChineseRuralDog dog_1 = new ChineseRuralDog("doge",99,"男",12,true); + ChineseRuralDog dog_2 = new ChineseRuralDog("瓜皮",66,"男",2,true); + ChineseRuralDog dog_3= new ChineseRuralDog("猫",50,"男",2,true); + + Cat cat_1 = new Cat("耄耋",180,"男",20,false); + Cat cat_2 = new Cat("哈吉米",127,"男",3,true); + Cat cat_3 = new Cat("曼波",80,"女",5,true); + + ArrayList initAnimalsList = new ArrayList<>(); + initAnimalsList.add(dog_1); + initAnimalsList.add(dog_2); + initAnimalsList.add(dog_3); + initAnimalsList.add(cat_1); + initAnimalsList.add(cat_2); + initAnimalsList.add(cat_3); + return initAnimalsList; + } + + public static void showAndBuyAnimal(ArrayList initAnimalsList,MyAnimalShop myAnimalShop){ + System.out.println("当前可以购买的动物为:"); + for(int i=0;i numList; + numList = Arrays.stream(numString.split(",")) + .map(Integer::parseInt) + .toList(); + for(int i=0;i=initAnimalsList.size()){ + throw new IndexOutOfBoundsException("该序号"+index+"不存在"); + } + Animal animal = initAnimalsList.get(index); + myAnimalShop.buyNewAnimal(animal); + } + success = true; + } catch (NumberFormatException e) { + System.err.println("请确保您只输入了数字和',"); + }catch (IndexOutOfBoundsException e){ + System.err.println(e.getMessage()); + }catch (InsufficientBalanceException e){ + System.out.println("余额不足,欢迎下次再来"); + success=true;//余额不足不再购买 + } + } + } + public static void pause(){ + System.out.println("\n--- 程序暂停,请按 [回车键] 继续 ---"); + Scanner sc = new Scanner(System.in); + sc.nextLine(); + System.out.println("--- 继续执行 ---"); + } +} diff --git a/work1/1123688216/Bonus/MutilThread.java b/work1/1123688216/Bonus/MutilThread.java new file mode 100644 index 00000000..e2ff74d6 --- /dev/null +++ b/work1/1123688216/Bonus/MutilThread.java @@ -0,0 +1,61 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +public class MutilThread implements Runnable{ + private final int myTurn; + private final int otherTurn; + private final ArrayList arr; + public MutilThread(ArrayList arr,int myTurn,int otherTurn) { + this.arr = arr; + this.myTurn=myTurn; + this.otherTurn = otherTurn; + } + @Override + public void run() { + for(int number:this.arr){ + synchronized (AlternatingState.Lock) { + while (AlternatingState.currentTurn != this.myTurn) { + try { + AlternatingState.Lock.wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + System.out.print(number + ","); + AlternatingState.currentTurn = otherTurn; + AlternatingState.Lock.notifyAll(); + } + } + } + public static void main(String[] args) { + System.out.println("请输入第一个数组中的元素,用','隔开"); + Scanner sc = new Scanner(System.in); + String numString = sc.nextLine(); + List numList; + numList = Arrays.stream(numString.split(",")) + .map(Integer::parseInt) + .toList(); + ArrayList arr1 = new ArrayList<>(numList); + + System.out.println("请输入第二个数组中的元素,用','隔开"); + sc = new Scanner(System.in); + numString = sc.nextLine(); + + numList = Arrays.stream(numString.split(",")) + .map(Integer::parseInt) + .toList(); + ArrayList arr2 = new ArrayList<>(numList); + //两个线程创建,需要设置锁来进行交替运行 + Thread thread1 = new Thread(new MutilThread(arr1,1,2),"thread1"); + Thread thread2 = new Thread(new MutilThread(arr2,2,1),"thread2"); + thread1.start(); + thread2.start(); + } +} + +class AlternatingState{ + public static final Object Lock = new Object(); + public static int currentTurn =1;//表示当前哪个线程拥有执行权 +} diff --git a/work1/1123688216/Bonus/Regex.java b/work1/1123688216/Bonus/Regex.java new file mode 100644 index 00000000..5a1bba4f --- /dev/null +++ b/work1/1123688216/Bonus/Regex.java @@ -0,0 +1,24 @@ +import java.util.Scanner; +import java.util.regex.Pattern; + +public class Regex { + //正则学习书籍:https://github.com/ziishaned/learn-regex/tree/master/translations + //合法邮箱格式:本地部分+@+域名部分+.+顶级域名 + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.println("请输入待检测的邮箱"); + String email = sc.nextLine(); + if(isVaildEmail(email)){ + System.out.println("该邮箱格式合格"); + } + else{ + System.out.println("该邮箱格式不合格"); + } + } + //开头部分。匹配 1 个或多个字母、数字、_、- 或 +。保证了邮箱不会以.开头。同时确保不会出现连续的‘.’号 + public static boolean isVaildEmail(String email){ + String regex= "^[a-zA-Z0-9_\\-\\+]+(\\.[a-zA-Z0-9_\\-\\+]+)*@[a-zA-Z0-9\\-]+(\\.[a-zA-Z0-9\\-]+)*\\.[a-zA-Z]{2,}$"; + return Pattern.matches(regex,email); + } +} diff --git a/work1/1123688216/Leetcode-27.png b/work1/1123688216/Leetcode-27.png new file mode 100644 index 00000000..42c1f939 Binary files /dev/null and b/work1/1123688216/Leetcode-27.png differ diff --git "a/work1/1123688216/PTA\346\210\252\345\233\276.png" "b/work1/1123688216/PTA\346\210\252\345\233\276.png" new file mode 100644 index 00000000..7b4ba177 Binary files /dev/null and "b/work1/1123688216/PTA\346\210\252\345\233\276.png" differ diff --git a/work2/1123688216/DWASearch.jar b/work2/1123688216/DWASearch.jar new file mode 100644 index 00000000..205669f6 Binary files /dev/null and b/work2/1123688216/DWASearch.jar differ diff --git a/work2/1123688216/README.md b/work2/1123688216/README.md new file mode 100644 index 00000000..4843d1f3 --- /dev/null +++ b/work2/1123688216/README.md @@ -0,0 +1,75 @@ +# 使用方式 +可在命令行中输入Java -jar DWASearch.jar input.txt output.txt运行该项目,修改input.txt中的内容可以有不同的结果,具体规则按第二轮考核要求 +可以进行测试的比赛有: +## json数据来源 +1:所有json数据均来源于https://www.worldaquatics.com/competitions/4725/world-aquatics-championships-singapore-2025/results?disciplines=DV +比赛名称:World Aquatics Championships - Singapore 2025 +通过F12在网络处筛选Fetch/XHR来获得对应项目的json文件 +- 全部运动员信息: + - players +- 女子比赛: + - women 1m springboard + - women 3m springboard + - women 10m platform + - woman 3m synchronised + - women 10m synchronised +- 男子比赛 : + - men 1m springboard + - men 3m springboard + - men 10m platform + - men 3m synchronised + - men 10m synchronised +- 双人比赛: + - mixed 3m synchronised + - mixed 10m synchronised + - mixed 3m & 10m team + +# 主要模块 +## Athlete类 用于保存运动员信息 + +| 属性 | 说明 | 类型 | +|----------|---------------------------|-----| +| fullName | 全名 | String | +| gender | 性别 | String | +| country | 国家 | String | +|preliminaryRank | 初赛排名,默认为"*" | String | +|semifinalRank | 半决赛排名,默认为"*" | String | +|finalRank | 决赛排名,默认为"*" | String | +|preliminaryTotalPoint | 初赛总分 |float| +|seminifinalTotalPoint| 半决赛总分 |float| +|finalTotalPoint | 决赛总分 |float| +|preliminaryScore| 初赛分数,"Score1+Score2+..." |String| +|seminifinalScore| 半决赛分数,"Score1+Score2+..." |String| +|finalScore | 决赛分数,"Score1+Score2+..."|String| + + + + +## CoreModule 类有四个函数 +- ## void dispalyAllPlayersInfo(PrintWriter writer) +- 该函数的功能为输出所有运动员信息到输出字符流对象中,需要传入的参数为输出字符流对象。 +- 算法的关键在于json文件的解析,我使用了jackson来完成该任务。 +- 由于在json文件中,每个运动员的信息都是关联在一起的,因此我没有保存运动员的信息,而是直接将信息输出到输出字符流对象中。 + +- ## void displayResultForEachEvent(String inputComment, boolean isDetail, PrintWriter writer) +- 该函数的功能是根据传入的参数的不同,来进行对应比赛的结果输出。需要传入的参数为赛事名称,是否显示详细信息,输出字符流对象。 +- 赛事的json格式与运动员格式不同,所以无法直接套用dispalyAllPlayersInfo(),但是不同赛事的json格式一致,因此所有赛事可以使用同样的方式解析json文件。 +- 对于传入的赛事名称,我要求与该项目下的json文件中的赛事名称一致,若没有找到该赛事名称,则返回"N/A"错误信息。 +- 对于json文件解析后得到的信息我保存到了Athlete对象中,并建立了一个HashMap用于保存运动员对象,其中key为运动员的全名,value为运动员对象。(JSON文件中也有每个运动员的ID,改用ID作为key可以避免同名问题) +- ## int parseRankToInt(String rankStr) +- 该函数的功能为将传入的字符串转换为int型数据,同时用于displayResultForEachEvent()函数中按第一场比赛排名排序,要考虑到存在部分运动员三场比赛全都缺席 +- ## String formatAndSortTeamNames(String rawFullName) +- 该函数用于多人项目中,运动员名字的排序和输出格式的转换,输入为原始json中的运动们的全名,输出为格式化后的名字 +- 由于json文件中本身是无序的且用来隔开的符号是'/'而不是'&',所以需要该函数进行转换 +- ## String[] judgmentFormat(String input) +- 用于判断String是否符合题目要求和查找比赛名称和是否需要输出细节,需要传入的参数为String,输出为Sting数组 = {比赛名称,是否需要显示详细信息} + +## DWASearch类 +- 程序主入口,只有一个main函数,判断输入的参数是否合规和读取输入文件并分析命令类型 + +# 单元测试 +## ![单元测试结果](../../../DWASearch/png/Junit%20Result.png) +## ![单元测试内容](../../../DWASearch/png/Junit%20Test.png) + +# 异常处理说明 +- 没有自己写异常,只用了基本的Exception diff --git a/work2/1123688216/input.txt b/work2/1123688216/input.txt new file mode 100644 index 00000000..4c979054 --- /dev/null +++ b/work2/1123688216/input.txt @@ -0,0 +1,10 @@ +player +Players +resultwomen 1m springboard +result Women 10m springboard +result sss +result detail +result women 1m springboard details +result men 10m synchronised +players +result women 10m springboard diff --git a/work2/1123688216/output.txt b/work2/1123688216/output.txt new file mode 100644 index 00000000..f40e268b --- /dev/null +++ b/work2/1123688216/output.txt @@ -0,0 +1,1128 @@ +Error +----- +Error +----- +Error +----- +N/A +----- +N/A +----- +N/A +----- +N/A +----- +N/A +----- +Full name:Vartan BAYANDURYAN +Gender: +Country:Armenia +----- +Full name:Aleksandra BIBIKINA +Gender:Ů +Country:Armenia +----- +Full name:Alisa ZAKARYAN +Gender:Ů +Country:Armenia +----- +Full name:Jaxon BOWSHIRE +Gender: +Country:Australia +----- +Full name:Ellie COLE +Gender:Ů +Country:Australia +----- +Full name:Maggie GREY +Gender:Ů +Country:Australia +----- +Full name:Maddison KEENEY +Gender:Ů +Country:Australia +----- +Full name:Alysha KOLOI +Gender:Ů +Country:Australia +----- +Full name:Jonah MERCIECA +Gender: +Country:Australia +----- +Full name:Milly PUCKERIDGE +Gender:Ů +Country:Australia +----- +Full name:Cassiel ROUSSEAU +Gender: +Country:Australia +----- +Full name:Georgia SHEEHAN +Gender:Ů +Country:Australia +----- +Full name:Hudson SKINNER +Gender: +Country:Australia +----- +Full name:Benjamin WILSON +Gender: +Country:Australia +----- +Full name:Anton KNOLL +Gender: +Country:Austria +----- +Full name:Dariush LOTFI +Gender: +Country:Austria +----- +Full name:Luis Felipe BONFIM DOS SANTOS MOURA +Gender: +Country:Brazil +----- +Full name:Rafael BORGES +Gender: +Country:Brazil +----- +Full name:Miguel CARDOSO +Gender: +Country:Brazil +----- +Full name:Caio DALMASO +Gender: +Country:Brazil +----- +Full name:Luana LIRA +Gender:Ů +Country:Brazil +----- +Full name:Rafael MAX +Gender: +Country:Brazil +----- +Full name:Jackson OLIVEIRA +Gender: +Country:Brazil +----- +Full name:Ingrid OLIVEIRA +Gender:Ů +Country:Brazil +----- +Full name:Giovanna PEDROSO +Gender:Ů +Country:Brazil +----- +Full name:Anna SANTOS +Gender:Ů +Country:Brazil +----- +Full name:Tsvetomir EREMINOV +Gender: +Country:Bulgaria +----- +Full name:Tazman ABRAMOWICZ +Gender: +Country:Canada +----- +Full name:Matt CULLEN +Gender: +Country:Canada +----- +Full name:Margo ERLAM +Gender:Ů +Country:Canada +----- +Full name:Katelyn FUNG +Gender:Ů +Country:Canada +----- +Full name:Amelie-Laura JASMIN +Gender:Ů +Country:Canada +----- +Full name:Kate MILLER +Gender:Ů +Country:Canada +----- +Full name:Sonya PALKHIVALA +Gender:Ů +Country:Canada +----- +Full name:Carson PAUL +Gender: +Country:Canada +----- +Full name:Benjamin TESSIER +Gender: +Country:Canada +----- +Full name:Donato NEGLIA +Gender: +Country:Chile +----- +Full name:Yuan CAO +Gender: +Country:People's Republic of China +----- +Full name:Jia CHEN +Gender:Ů +Country:People's Republic of China +----- +Full name:Yiwen CHEN +Gender:Ů +Country:People's Republic of China +----- +Full name:Yuxi CHEN +Gender:Ů +Country:People's Republic of China +----- +Full name:Zilong CHENG +Gender: +Country:People's Republic of China +----- +Full name:Yajie LI +Gender:Ů +Country:People's Republic of China +----- +Full name:Zongyuan WANG +Gender: +Country:People's Republic of China +----- +Full name:Peiling XIE +Gender:Ů +Country:People's Republic of China +----- +Full name:Siyu YAN +Gender: +Country:People's Republic of China +----- +Full name:Minjie ZHANG +Gender:Ů +Country:People's Republic of China +----- +Full name:Renjie ZHAO +Gender: +Country:People's Republic of China +----- +Full name:Jiuyuan ZHENG +Gender: +Country:People's Republic of China +----- +Full name:Zifeng ZHU +Gender: +Country:People's Republic of China +----- +Full name:Yongxin ZHU +Gender: +Country:People's Republic of China +----- +Full name:Juliana GIRON +Gender:Ů +Country:Colombia +----- +Full name:Mariana OSORIO +Gender:Ů +Country:Colombia +----- +Full name:Viviana URIBE BERMUDEZ +Gender:Ů +Country:Colombia +----- +Full name:Luis Felipe URIBE BERMUDEZ +Gender: +Country:Colombia +----- +Full name:Marko HULJEV +Gender: +Country:Croatia +----- +Full name:Luka MARTINOVIC +Gender: +Country:Croatia +----- +Full name:Mikula MIOCIC +Gender: +Country:Croatia +----- +Full name:Matej NEVESCANIN +Gender: +Country:Croatia +----- +Full name:Bernaldo ARIAS PENA +Gender: +Country:Cuba +----- +Full name:Anisley GARCIA NAVARRO +Gender:Ů +Country:Cuba +----- +Full name:Carlos Daniel RAMOS RODRIGUEZ +Gender: +Country:Cuba +----- +Full name:Frank Abel ROSALES TRIANA +Gender: +Country:Cuba +----- +Full name:Tereza JELINKOVA +Gender:Ů +Country:Czechia +----- +Full name:Ivana MEDKOVA +Gender:Ů +Country:Czechia +----- +Full name:Jonas Brockstedt MADSEN +Gender: +Country:Denmark +----- +Full name:Laura VALORE +Gender:Ů +Country:Denmark +----- +Full name:Victoria GARZA +Gender:Ů +Country:Dominican Republic +----- +Full name:Frandiel GOMEZ +Gender: +Country:Dominican Republic +----- +Full name:Jonathan RUVALCABA +Gender: +Country:Dominican Republic +----- +Full name:Saymol SANCHEZ +Gender: +Country:Dominican Republic +----- +Full name:Mohamed AHMED FAROUK +Gender: +Country:Egypt +----- +Full name:Maha EISSA +Gender:Ů +Country:Egypt +----- +Full name:Valeria ANTOLINO +Gender:Ů +Country:Spain +----- +Full name:Rodrigo CARDONA HERRERO +Gender: +Country:Spain +----- +Full name:Ana CARVAJAL +Gender:Ů +Country:Spain +----- +Full name:Juan Pablo CORTES ZAPATA +Gender: +Country:Spain +----- +Full name:Max LINAN +Gender: +Country:Spain +----- +Full name:Jorge RODRIGUEZ LEDESMA +Gender: +Country:Spain +----- +Full name:Gwendal BISCH +Gender: +Country:France +----- +Full name:Jules BOUYER +Gender: +Country:France +----- +Full name:Jade GILLET +Gender:Ů +Country:France +----- +Full name:Nais GILLET +Gender:Ů +Country:France +----- +Full name:Emily HALLIFAX +Gender:Ů +Country:France +----- +Full name:Juliette LANDI +Gender:Ů +Country:France +----- +Full name:Maisie BOND +Gender:Ů +Country:Great Britain +----- +Full name:Tilly BROWN +Gender:Ů +Country:Great Britain +----- +Full name:Anthony HARDING +Gender: +Country:Great Britain +----- +Full name:Yasmin HARPER +Gender:Ů +Country:Great Britain +----- +Full name:Jordan HOULDEN +Gender: +Country:Great Britain +----- +Full name:Kyle KOTHARI +Gender: +Country:Great Britain +----- +Full name:Jack LAUGHER +Gender: +Country:Great Britain +----- +Full name:Robbie LEE +Gender: +Country:Great Britain +----- +Full name:Euan MCCABE +Gender: +Country:Great Britain +----- +Full name:Scarlett MEW JENSEN +Gender:Ů +Country:Great Britain +----- +Full name:Noah George PENMAN +Gender: +Country:Great Britain +----- +Full name:Grace REID +Gender:Ů +Country:Great Britain +----- +Full name:Amy ROLLINSON +Gender:Ů +Country:Great Britain +----- +Full name:Lois TOULSON +Gender:Ů +Country:Great Britain +----- +Full name:Tornike ONIKASHVILI +Gender: +Country:Georgia +----- +Full name:Mariam SHANIDZE +Gender:Ů +Country:Georgia +----- +Full name:Tekle SHARIA +Gender:Ů +Country:Georgia +----- +Full name:Aleksandre TSKHOMELIDZE +Gender: +Country:Georgia +----- +Full name:Giorgi TSULUKIDZE +Gender: +Country:Georgia +----- +Full name:Luis Carlo AVILA SANCHEZ +Gender: +Country:Germany +----- +Full name:Timo BARTHEL +Gender: +Country:Germany +----- +Full name:Carolina COORDES +Gender:Ů +Country:Germany +----- +Full name:Jaden Shiloh EIKERMANN GREGORCHUK +Gender: +Country:Germany +----- +Full name:Lena HENTSCHEL +Gender:Ů +Country:Germany +----- +Full name:Lou Noel Guy MASSENBERG +Gender: +Country:Germany +----- +Full name:Jette MULLER +Gender:Ů +Country:Germany +----- +Full name:Pauline Alexandra PFEIF +Gender:Ů +Country:Germany +----- +Full name:Ole Johannes ROSLER +Gender: +Country:Germany +----- +Full name:Moritz WESEMANN +Gender: +Country:Germany +----- +Full name:Theofilos AFTHINOS +Gender: +Country:Greece +----- +Full name:Stavros SIFNAIOS +Gender: +Country:Greece +----- +Full name:Tsz Ming CHAN +Gender:Ů +Country:Hong Kong, China +----- +Full name:Ka Sin LEUNG +Gender:Ů +Country:Hong Kong, China +----- +Full name:Angel WANG +Gender:Ů +Country:Hong Kong, China +----- +Full name:Ziyi WANG +Gender:Ů +Country:Hong Kong, China +----- +Full name:Lok Pan Robben YIU +Gender: +Country:Hong Kong, China +----- +Full name:Pak Yin Curtis YUEN +Gender: +Country:Hong Kong, China +----- +Full name:Andriyan ANDRIYAN +Gender: +Country:Indonesia +----- +Full name:Gladies Lariesa Garina HAGA +Gender:Ů +Country:Indonesia +----- +Full name:Nur Mufiidah SUDIRMAN +Gender:Ů +Country:Indonesia +----- +Full name:Muhamad YUDHA PRASTIYO +Gender: +Country:Indonesia +----- +Full name:Surajit RAJBANSHI +Gender: +Country:India +----- +Full name:Indiver SAIREM +Gender: +Country:India +----- +Full name:Palak SHARMA +Gender:Ů +Country:India +----- +Full name:Shravani Pratap SURYAWANSHI +Gender:Ů +Country:India +----- +Full name:Ningthoujam WILLSON SINGH +Gender: +Country:India +----- +Full name:Premson Meitei YUMNAM +Gender: +Country:India +----- +Full name:Sam VAJERHELABAD +Gender: +Country:Islamic Republic of Iran +----- +Full name:Jake PASSMORE +Gender: +Country:Ireland +----- +Full name:Elena BERTOCCHI +Gender:Ů +Country:Italy +----- +Full name:Simone CONTE +Gender: +Country:Italy +----- +Full name:Riccardo GIOVANNINI +Gender: +Country:Italy +----- +Full name:Sarah JODOIN DI MARIA +Gender:Ů +Country:Italy +----- +Full name:Lorenzo MARSAGLIA +Gender: +Country:Italy +----- +Full name:Chiara PELLACANI +Gender:Ů +Country:Italy +----- +Full name:Elisa PIZZINI +Gender:Ů +Country:Italy +----- +Full name:Matteo SANTORO +Gender: +Country:Italy +----- +Full name:Giovanni TOCCI +Gender: +Country:Italy +----- +Full name:Senri IKUMA +Gender: +Country:Japan +----- +Full name:Rin KANETO +Gender:Ů +Country:Japan +----- +Full name:Sayaka MIKAMI +Gender:Ů +Country:Japan +----- +Full name:Reo NISHIDA +Gender: +Country:Japan +----- +Full name:Shu OHKUBO +Gender: +Country:Japan +----- +Full name:Sho SAKAI +Gender: +Country:Japan +----- +Full name:Haruki SUYAMA +Gender: +Country:Japan +----- +Full name:Rikuto TAMAI +Gender: +Country:Japan +----- +Full name:Nazar KOZHANOV +Gender: +Country:Kazakhstan +----- +Full name:Kirill NOVIKOV +Gender: +Country:Kazakhstan +----- +Full name:Dayeon JUNG +Gender:Ů +Country:Republic of Korea +----- +Full name:Minhyeok KANG +Gender: +Country:Republic of Korea +----- +Full name:Suji KIM +Gender:Ů +Country:Republic of Korea +----- +Full name:Hyeonju KO +Gender:Ů +Country:Republic of Korea +----- +Full name:Yejoo LEE +Gender:Ů +Country:Republic of Korea +----- +Full name:Nayun MOON +Gender:Ů +Country:Republic of Korea +----- +Full name:Jungwhi SHIN +Gender: +Country:Republic of Korea +----- +Full name:Jaegyeong YI +Gender: +Country:Republic of Korea +----- +Full name:Sebastian KONECKI +Gender: +Country:Lithuania +----- +Full name:Martynas LISAUSKAS +Gender: +Country:Lithuania +----- +Full name:Heung Wing HE +Gender: +Country:Macau, China +----- +Full name:Ian I LEONG +Gender:Ů +Country:Macau, China +----- +Full name:Cho Yi WONG +Gender:Ů +Country:Macau, China +----- +Full name:Hang U ZHAO +Gender:Ů +Country:Macau, China +----- +Full name:Elvis Priestly ANAK CLEMENT +Gender: +Country:Malaysia +----- +Full name:Nurqayyum Nazmi BIN MOHAMAD NAZIM +Gender: +Country:Malaysia +----- +Full name:Enrique HAROLD +Gender: +Country:Malaysia +----- +Full name:Yiat Qing LEE +Gender:Ů +Country:Malaysia +----- +Full name:Pandelela PAMG +Gender:Ů +Country:Malaysia +----- +Full name:Muhammad Syafiq PUTEH +Gender: +Country:Malaysia +----- +Full name:Rui Jie YONG +Gender: +Country:Malaysia +----- +Full name:Gabriela AGUNDEZ GARCIA +Gender:Ů +Country:Mexico +----- +Full name:Kevin BERLIN REYES +Gender: +Country:Mexico +----- +Full name:Juan Manuel CELAYA HERNANDEZ +Gender: +Country:Mexico +----- +Full name:Lia Yatzil CUEVA LOBATO +Gender:Ů +Country:Mexico +----- +Full name:Mia Zazil CUEVA LOBATO +Gender:Ů +Country:Mexico +----- +Full name:Alejandra ESTUDILLO TORRES +Gender:Ů +Country:Mexico +----- +Full name:Maria Fernanda GARCIA SIXTOS +Gender:Ů +Country:Mexico +----- +Full name:Abigail GONZALEZ ROEL +Gender:Ů +Country:Mexico +----- +Full name:Osmar OLVERA IBARRA +Gender: +Country:Mexico +----- +Full name:Zyanya Yunuen PARRA MARTIN +Gender:Ů +Country:Mexico +----- +Full name:Emilio TREVINO LAUREANO +Gender: +Country:Mexico +----- +Full name:Aranza VAZQUEZ MONTANO +Gender:Ů +Country:Mexico +----- +Full name:Randal WILLARS VALDEZ +Gender: +Country:Mexico +----- +Full name:Ekaterina BELIAEVA +Gender:Ů +Country:Neutral Athletes B +----- +Full name:Aleksandr BONDAR +Gender: +Country:Neutral Athletes B +----- +Full name:Gennadii FOKIN +Gender: +Country:Neutral Athletes B +----- +Full name:Viktoriia FROLOVA +Gender:Ů +Country:Neutral Athletes B +----- +Full name:Kristina ILINYKH +Gender:Ů +Country:Neutral Athletes B +----- +Full name:Aleksandra KEDRINA +Gender:Ů +Country:Neutral Athletes B +----- +Full name:Anna KONANYKHINA +Gender:Ů +Country:Neutral Athletes B +----- +Full name:Elizaveta KUZINA +Gender:Ů +Country:Russian Federation +----- +Full name:Egor LAPIN +Gender: +Country:Neutral Athletes B +----- +Full name:Ilia MOLCHANOV +Gender: +Country:Neutral Athletes B +----- +Full name:Nikita SHLEIKHER +Gender: +Country:Neutral Athletes B +----- +Full name:Ruslan TERNOVOI +Gender: +Country:Neutral Athletes B +----- +Full name:Iuliia TIMOSHININA +Gender:Ů +Country:Neutral Athletes B +----- +Full name:Else PRAASTERINK +Gender:Ů +Country:Netherlands +----- +Full name:Isak BORSLIEN +Gender: +Country:Norway +----- +Full name:Caroline KUPKA +Gender:Ů +Country:Norway +----- +Full name:Nathan BROWN +Gender: +Country:New Zealand +----- +Full name:Maggie SQUIRE +Gender:Ů +Country:New Zealand +----- +Full name:Liam STONE +Gender: +Country:New Zealand +----- +Full name:Frazer TAVENER +Gender: +Country:New Zealand +----- +Full name:Ana RICCI +Gender:Ů +Country:Peru +----- +Full name:Ariana Hannah DRAKE +Gender:Ů +Country:Philippines +----- +Full name:Aleksandra BLAZOWSKA +Gender:Ů +Country:Poland +----- +Full name:Kacper LESIAK +Gender: +Country:Poland +----- +Full name:Maria LUKASZEWICZ +Gender:Ů +Country:Poland +----- +Full name:Andrzej RZESZUTEK +Gender: +Country:Poland +----- +Full name:Kaja SKRZEK +Gender:Ů +Country:Poland +----- +Full name:Wi Hyon CHOE +Gender: +Country:Democratic People's Republic of Korea +----- +Full name:Jin Mi JO +Gender:Ů +Country:Democratic People's Republic of Korea +----- +Full name:Ryu Myong JO +Gender: +Country:Democratic People's Republic of Korea +----- +Full name:Mi Hwa KIM +Gender:Ů +Country:Democratic People's Republic of Korea +----- +Full name:Ji Hye KIM +Gender:Ů +Country:Democratic People's Republic of Korea +----- +Full name:Che Won KO +Gender: +Country:Democratic People's Republic of Korea +----- +Full name:Alexandru AVASILOAE +Gender: +Country:Romania +----- +Full name:Nicoleta-Angelica MUSCALU +Gender:Ů +Country:Romania +----- +Full name:Grace Caitlin BRAMMER +Gender:Ů +Country:South Africa +----- +Full name:Bailey Savannah HEYDRA +Gender:Ů +Country:South Africa +----- +Full name:Zalika Reuel METHULA +Gender:Ů +Country:South Africa +----- +Full name:Kay Yian FONG +Gender:Ů +Country:Singapore +----- +Full name:Ainslee Jia Ern KWANG +Gender:Ů +Country:Singapore +----- +Full name:Shen Oon Max LEE +Gender: +Country:Singapore +----- +Full name:Clara LIAW +Gender:Ů +Country:Singapore +----- +Full name:Alycia LIM +Gender:Ů +Country:Singapore +----- +Full name:Geng Wee Ayden NG +Gender: +Country:Singapore +----- +Full name:Ashlee Yi Xuan TAN +Gender:Ů +Country:Singapore +----- +Full name:Avvir THAM +Gender: +Country:Singapore +----- +Full name:Shek Yen YIM +Gender: +Country:Singapore +----- +Full name:Aleksa TEOFILOVIC +Gender: +Country:Serbia +----- +Full name:Michelle HEIMBERG +Gender:Ů +Country:Switzerland +----- +Full name:David EKDAHL +Gender: +Country:Sweden +----- +Full name:Nina JANMYR +Gender:Ů +Country:Sweden +----- +Full name:Elias PETERSEN +Gender: +Country:Sweden +----- +Full name:Elna WIDERSTROM +Gender:Ů +Country:Sweden +----- +Full name:Chawanwat JUNTAPHADAWON +Gender: +Country:Thailand +----- +Full name:Jacqueline CHEN +Gender:Ů +Country:Chinese Taipei +----- +Full name:Barbara CHEN +Gender:Ů +Country:Chinese Taipei +----- +Full name:Kseniia BAILO +Gender:Ů +Country:Ukraine +----- +Full name:Kseniia BOCHEK +Gender:Ů +Country:Ukraine +----- +Full name:Kirill BOLIUKH +Gender: +Country:Ukraine +----- +Full name:Bohdan CHYZHOVSKYI +Gender: +Country:Ukraine +----- +Full name:Mark HRYTSENKO +Gender: +Country:Ukraine +----- +Full name:Diana KARNAFEL +Gender:Ů +Country:Ukraine +----- +Full name:Danylo KONOVALOV +Gender: +Country:Ukraine +----- +Full name:Sofiia LYSKUN +Gender:Ů +Country:Ukraine +----- +Full name:Stanislav OLIFERCHYK +Gender: +Country:Ukraine +----- +Full name:Oleksii SEREDA +Gender: +Country:Ukraine +----- +Full name:Grayson CAMPBELL +Gender: +Country:United States of America +----- +Full name:Bayleigh CRANFORD +Gender:Ů +Country:United States of America +----- +Full name:Collier DYER +Gender: +Country:United States of America +----- +Full name:Maxwell FLORY +Gender: +Country:United States of America +----- +Full name:Nick HARRIS +Gender: +Country:United States of America +----- +Full name:Joshua HEDBERG +Gender: +Country:United States of America +----- +Full name:Luke Anthony HERNANDEZ +Gender: +Country:United States of America +----- +Full name:Hailey HERNANDEZ +Gender:Ů +Country:United States of America +----- +Full name:Kyndal KNIGHT +Gender:Ů +Country:United States of America +----- +Full name:Anna KWONG +Gender:Ů +Country:United States of America +----- +Full name:Ella ROSELLI +Gender:Ů +Country:United States of America +----- +Full name:Jack RYAN +Gender: +Country:United States of America +----- +Full name:Jordan RZEPKA +Gender: +Country:United States of America +----- +Full name:Bailee STURGILL +Gender:Ů +Country:United States of America +----- +Full name:Carson TYLER +Gender: +Country:United States of America +----- +Full name:Sophia VERZYL +Gender:Ů +Country:United States of America +----- +Full name:Tyler WILLS +Gender: +Country:United States of America +----- +Full name:Lily WITTE +Gender:Ů +Country:United States of America +----- +Full name:Daryn WRIGHT +Gender:Ů +Country:United States of America +----- +Full name:Lyle YOST +Gender: +Country:United States of America +----- +Full name:Vyacheslav KACHANOV +Gender: +Country:Uzbekistan +----- +Full name:Igor MYALIN +Gender: +Country:Uzbekistan +----- +Full name:Jesus Eduardo GONZALEZ REYES +Gender: +Country:Venezuela +----- +Full name:Elizabeth PEREZ +Gender:Ů +Country:Venezuela +----- +Full name:Juan TRAVIESO +Gender: +Country:Venezuela +----- diff --git a/work2/1123688216/png/Junit Result.png b/work2/1123688216/png/Junit Result.png new file mode 100644 index 00000000..6053ef5c Binary files /dev/null and b/work2/1123688216/png/Junit Result.png differ diff --git a/work2/1123688216/png/Junit Test.png b/work2/1123688216/png/Junit Test.png new file mode 100644 index 00000000..f515dac0 Binary files /dev/null and b/work2/1123688216/png/Junit Test.png differ diff --git a/work2/1123688216/pom.xml b/work2/1123688216/pom.xml new file mode 100644 index 00000000..377346b2 --- /dev/null +++ b/work2/1123688216/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + org.example + DWASearch + 1.0-SNAPSHOT + + + + com.fasterxml.jackson.core + jackson-databind + 2.15.2 + + + org.junit.jupiter + junit-jupiter + RELEASE + test + + + org.junit.jupiter + junit-jupiter + RELEASE + test + + + org.junit.jupiter + junit-jupiter + RELEASE + test + + + org.junit.jupiter + junit-jupiter + RELEASE + test + + + + + + 17 + 17 + UTF-8 + + + \ No newline at end of file diff --git a/work2/1123688216/src/main/java/org/example/Athlete.java b/work2/1123688216/src/main/java/org/example/Athlete.java new file mode 100644 index 00000000..4a59e46e --- /dev/null +++ b/work2/1123688216/src/main/java/org/example/Athlete.java @@ -0,0 +1,128 @@ +package org.example; + +import java.util.List; + +public class Athlete { + protected String fullName; + protected String gender; + protected String country; + + protected String preliminaryRank="*"; + protected String semifinalRank="*"; + protected String finalRank="*"; + protected float preliminaryTotalPoint; + protected float seminifinalTotalPoint; + protected float finalTotalPoint; + protected String preliminaryScore="*"; + protected String semifinalScore="*"; + protected String finalScore="*"; + public float getFinalTotalPoint() { + return finalTotalPoint; + } + + public void setFinalTotalPoint(float finalTotalPoint) { + this.finalTotalPoint = finalTotalPoint; + } + + public float getPreliminaryTotalPoint() { + return preliminaryTotalPoint; + } + + public void setPreliminaryTotalPoint(float preliminaryTotalPoint) { + this.preliminaryTotalPoint = preliminaryTotalPoint; + } + + public float getSeminifinalTotalPoint() { + return seminifinalTotalPoint; + } + + public void setSeminifinalTotalPoint(float seminifinalTotalPoint) { + this.seminifinalTotalPoint = seminifinalTotalPoint; + } + + + + public String getFinalRank() { + return finalRank; + } + public void setFinalRank(String finalRank) { + this.finalRank = finalRank; + } + + public String getSemifinalRank() { + return semifinalRank; + } + + public void setSemifinalRank(String semifinalRank) { + this.semifinalRank = semifinalRank; + } + + public String getPreliminaryRank() { + return preliminaryRank; + } + + public void setPreliminaryRank(String preliminaryRank) { + this.preliminaryRank = preliminaryRank; + } + + + public String getFinalScore() { + return finalScore; + } + + public void setFinalScore(String finalScore) { + this.finalScore = finalScore; + } + + public String getPreliminaryScore() { + return preliminaryScore; + } + + public void setPreliminaryScore(String preliminaryScore) { + this.preliminaryScore = preliminaryScore; + } + + public String getSemifinalScore() { + return semifinalScore; + } + + public void setSemifinalScore(String semifinalScore) { + this.semifinalScore = semifinalScore; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + + + public Athlete(String fullName, String gender,String country) { + this.fullName = fullName; + this.country = country; + this.gender = gender; + } + + public Athlete(){} + + +} diff --git a/work2/1123688216/src/main/java/org/example/CoreModule.java b/work2/1123688216/src/main/java/org/example/CoreModule.java new file mode 100644 index 00000000..172438f7 --- /dev/null +++ b/work2/1123688216/src/main/java/org/example/CoreModule.java @@ -0,0 +1,242 @@ +package org.example; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.File; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.util.*; + +public class CoreModule { + + public static void main(String[] args) { + + } + + public void dispalyAllPlayersInfo(PrintWriter writer) { + try { + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode root = objectMapper.readTree(new File("json/athletes.json")); + if (root.isArray()) { + for (JsonNode countryNode : root) { + JsonNode participations = countryNode.path("Participations"); + if (participations.isArray()) { + for (JsonNode participation : participations) { + String firstName = participation.path("PreferredFirstName").asText(); + String lastName = participation.path("PreferredLastName").asText(); + String fullName = firstName + " " + lastName; + + String gender = "0".equals(participation.path("Gender").asText()) ? "男" : "女"; + String country = participation.path("NAT").asText(); + String output = "Full name:" + fullName + "\n" + "Gender:" + gender + "\n" + "Country:" + country + "\n" + "-----"; + writer.println(output); + } + } + } + System.out.println("全部运动员信息写入完毕"); + + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + + //各类赛事的json格式相同,只需通过input.txt中的内容判断读取哪个文件即可 + public void displayResultForEachEvent(String inputComment, boolean isDetail, PrintWriter writer) { + try { + Map athleteMap = new HashMap<>(); + ObjectMapper objectMapper = new ObjectMapper(); + + File inputFile = new File("json/" + inputComment + ".json"); + if (!inputFile.exists()) { + writer.println("N/A"); + writer.println("-----"); + return; + } + String realPath = inputFile.getCanonicalPath(); + // 获取硬盘上真实的文件名(例如 "Women 10m Platform.json") + String realFileName = new File(realPath).getName(); + String expectedFileName = inputComment + ".json"; + if (!realFileName.equals(expectedFileName)) { + writer.println("N/A"); // 虽然文件在,但大小写不对,视为不在 + writer.println("-----"); + return; + } + + + JsonNode root = objectMapper.readTree(inputFile); + System.out.println("开始处理:" + inputComment); + JsonNode heats = root.path("Heats"); + if (heats.isArray()) { + for (JsonNode heat : heats) { + String phaseName = heat.path("PhaseName").asText(); + JsonNode results = heat.path("Results"); + for (JsonNode result : results) { + String rawName = result.path("FullName").asText();//由于部分FullName包含多人姓名,因此需要处理 + String fullName = formatAndSortTeamNames(rawName); + //创建储存表 + if (!athleteMap.containsKey(fullName)) { + athleteMap.put(fullName, new Athlete()); + } + Athlete athlete = athleteMap.get(fullName); + athlete.setFullName(fullName); + //跳水成绩 + JsonNode dives = result.path("Dives"); + StringBuilder tempScore = new StringBuilder(); + float totalScore = 0; + for (JsonNode dive : dives) { + String divePoints = dive.path("DivePoints").asText(); + if (!divePoints.isEmpty() && !divePoints.equalsIgnoreCase("null")) { + if (tempScore.length() > 0) { + tempScore.append(" + "); + } + tempScore.append(divePoints); + totalScore += Float.parseFloat(divePoints); + } + } + String tempScoreStr = tempScore.toString(); + //排名查询 + String rank = result.path("Rank").asText(); + if (rank == "") rank = "*"; + if (phaseName.contains("Finals")) { + athlete.setFinalScore(tempScoreStr); + athlete.setFinalRank(rank); + athlete.setFinalTotalPoint(totalScore); + } else if (phaseName.contains("Semifinals")) { + athlete.setSemifinalScore(tempScoreStr); + athlete.setSemifinalRank(rank); + athlete.setSeminifinalTotalPoint(totalScore); + } else if (phaseName.contains("Preliminaries")) { + athlete.setPreliminaryScore(tempScoreStr); + athlete.setPreliminaryRank(rank); + athlete.setPreliminaryTotalPoint(totalScore); + } + } + + } + } + + + List athleteList = new ArrayList<>(athleteMap.values()); + // 2. 使用自定义比较器进行排序 + athleteList.sort((a1, a2) -> { + int r1, r2; + if (!a1.getPreliminaryRank().equals("*")) { + r1 = parseRankToInt(a1.getPreliminaryRank()); + } else if (!a1.getSemifinalRank().equals("*")) { + r1 = parseRankToInt(a1.getSemifinalRank()); + } else { + r1 = parseRankToInt(a1.getFinalRank()); + } + + if (!a2.getPreliminaryRank().equals("*")) { + r2 = parseRankToInt(a2.getPreliminaryRank()); + } else if (!a2.getSemifinalRank().equals("*")) { + r2 = parseRankToInt(a2.getSemifinalRank()); + } else { + r2 = parseRankToInt(a2.getFinalRank()); + } + + return Integer.compare(r1, r2); // 升序排列:1, 2, 3... + }); + + for (Athlete athlete : athleteList) { + writer.println("Full Name:" + athlete.getFullName()); + writer.println("Rank:" + athlete.getPreliminaryRank() + " | " + athlete.getSemifinalRank() + " | " + athlete.getFinalRank()); + if (isDetail) { + if (athlete.getPreliminaryTotalPoint() == 0) { + writer.println("Preliminary Score:" + athlete.getPreliminaryScore()); + } else { + writer.println("Preliminary Score:" + athlete.getPreliminaryScore() + " = " + String.format("%.2f", athlete.getPreliminaryTotalPoint())); + } + if (athlete.getSeminifinalTotalPoint() == 0) { + writer.println("Semifinal Score:" + athlete.getSemifinalScore()); + } else { + writer.println("Semifinal Score:" + athlete.getSemifinalScore() + " = " + String.format("%.2f", athlete.getSeminifinalTotalPoint())); + } + if (athlete.getFinalTotalPoint() == 0) { + writer.println("Final Score:" + athlete.getFinalScore()); + } else { + writer.println("Final Score:" + athlete.getFinalScore() + " = " + String.format("%.2f", athlete.getFinalTotalPoint())); + } + writer.println("-----"); + + } else { + if (athlete.getFinalTotalPoint() == 0) { + writer.println("Score:" + athlete.getFinalScore()); + } else { + writer.println("Score:" + athlete.getFinalScore() + " = " + String.format("%.2f", athlete.getFinalTotalPoint())); + } + writer.println("-----"); + } + } + System.out.println("处理完成"); + writer.flush(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + //将比赛排名从String转为Int + private static int parseRankToInt(String rankStr) { + if (rankStr == null || rankStr.equals("N/A") || rankStr.isEmpty()) { + return 999; // 没参加比赛的人排到最后 + } + try { + // 去掉并列符号 =,只保留数字部分 +// String cleanRank = rankStr.replace("=", "").trim(); + return Integer.parseInt(rankStr); + } catch (NumberFormatException e) { + return 999; + } + } + + public static String formatAndSortTeamNames(String rawFullName) { + if (rawFullName == null || !rawFullName.contains("/")) { + return rawFullName; // 如果不是多人项目,直接返回 + } + + // 1. 拆分队伍成员 + // 使用正则表达式 \\s*/\\s* 可以处理 "A/B" 或 "A / B" 的情况 + String[] members = rawFullName.split("\\s*/\\s*"); + + // 2. 将成员放入 List 并根据 LastName 排序 + List memberList = Arrays.asList(members); + + memberList.sort((name1, name2) -> { + // 提取 LastName。假设格式是 "LASTNAME Firstname" + // 这里的逻辑是取空格前的第一个单词 + String ln1 = name1.trim().split(" ")[0]; + String ln2 = name2.trim().split(" ")[0]; + return ln1.compareTo(ln2); // 字母升序 + }); + + // 3. 用 " & " 重新连接 + return String.join(" & ", memberList); + } + + public String[] judgmentFormat(String input){ + String eventName = ""; + String isDetail="false"; + if(input.equals("players")){ + return new String[]{"players",isDetail}; + } + if(!input.startsWith("result ")||input.length()<=7){ + return new String[]{"Error",isDetail}; + } + if(input.endsWith(" detail")){ + //防止”result detail“的情况出现 + if(input.length()<=14){ + return new String[]{"N/A",isDetail}; + } + eventName = input.substring(7,input.length()-7); + isDetail = "true"; + }else{ + eventName = input.substring(7); + isDetail = "false"; + } + return new String[]{eventName,isDetail}; + } +} diff --git a/work2/1123688216/src/main/java/org/example/DWASearch.java b/work2/1123688216/src/main/java/org/example/DWASearch.java new file mode 100644 index 00000000..02543407 --- /dev/null +++ b/work2/1123688216/src/main/java/org/example/DWASearch.java @@ -0,0 +1,44 @@ +package org.example; + +import java.io.*; +import java.util.Scanner; + + +//TIP To Run code, press or +// click the icon in the gutter. +public class DWASearch { + public static void main(String[] args) { + File inputFile = new File(args[0]);//input.txt + File outputFile = new File(args[1]);//output.txt + + //读取input.txt文件内容 + try( + Scanner scanner = new Scanner(inputFile,"UTF-8"); + PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(outputFile)),true) + ){ + while (scanner.hasNextLine()){ + String command = scanner.nextLine(); + CoreModule coreModule = new CoreModule(); + String[] judgmentResult = coreModule.judgmentFormat(command); + if(judgmentResult[0].equals("players")){ + coreModule.dispalyAllPlayersInfo(writer); + } + else if(judgmentResult[0].equals("N/A")){ + writer.println("N/A"); + writer.println("-----"); + } + else if(judgmentResult[0].equals("Error")){ + writer.println("Error"); + writer.println("-----"); + }else{ + coreModule.displayResultForEachEvent(judgmentResult[0],judgmentResult[1].equals("true"),writer); + } + } + + }catch (IOException e){ + System.out.println("Error:"+e.getMessage()); + } + } + + +} \ No newline at end of file diff --git a/work2/1123688216/src/main/resources/META-INF/MANIFEST.MF b/work2/1123688216/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 00000000..819a66e8 --- /dev/null +++ b/work2/1123688216/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: org.example.DWASearch + diff --git a/work2/1123688216/src/test/java/org/example/CoreModuleTest.java b/work2/1123688216/src/test/java/org/example/CoreModuleTest.java new file mode 100644 index 00000000..93611884 --- /dev/null +++ b/work2/1123688216/src/test/java/org/example/CoreModuleTest.java @@ -0,0 +1,127 @@ +package org.example; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import java.io.*; +import static org.junit.jupiter.api.Assertions.*; + +class CoreModuleTest { + private CoreModule core; + private StringWriter stringWriter; + private PrintWriter writer; + + @BeforeEach + void setUp() { + core = new CoreModule(); + stringWriter = new StringWriter(); + writer = new PrintWriter(stringWriter); + } + + // 1. 测试特例:players 命令 + @Test + void testPlayersCommand() { + core.dispalyAllPlayersInfo(writer); + String output = stringWriter.toString(); + assertTrue(output.contains("Full name:"), "应包含运动员姓名"); + } + + // 2. 测试JudgmentFormat()在不带detail返回的格式是否正常 + @Test + void testJudgmentFormat_Normal() { + String[] res = core.judgmentFormat("result Women 10m Platform"); + assertEquals("Women 10m Platform", res[0]); + assertEquals("false", res[1]); + } + + // 2. 测试JudgmentFormat()在带detail时返回的格式是否正常 + @Test + void testJudgmentFormat_Detail() { + String[] res = core.judgmentFormat("result Women 10m Platform detail"); + assertEquals("Women 10m Platform", res[0]); + assertEquals("true", res[1]); + } + + // 4. 严格校验:缺失空格 (resultwomen) + @Test + void testJudgmentFormat_MissingSpace() { + String[] res = core.judgmentFormat("resultwomen 10m"); + assertEquals("Error", res[0]); + } + + // 5. 严格校验:空赛事名称 (result detail) + @Test + void testJudgmentFormat_OnlyDetail() { + String[] res = core.judgmentFormat("result detail"); + // 根据你代码中 input.length() <= 14 的逻辑 + assertEquals("N/A", res[0]); + } + + // 6. 严格校验:大小写匹配 (Women vs women) + @Test + void testCaseSensitivity() { + String[] events = { + "Women 10m Platform", + "men 10m platform", + "Women 10M Platform", + "Men 3m Platform" + }; + for(String event : events){ + core.displayResultForEachEvent("Women 10m platform", false, writer); + assertTrue(stringWriter.toString().contains("N/A"), "大小写不匹配应输出 N/A"); + stringWriter.getBuffer().setLength(0);//清空缓冲区 + } + + } + + // 7. 内部逻辑:姓名排序 (LastName A-Z) + @Test + void testTeamNameSorting() { + String raw = "ZHANG San / LI Si / WU HU / G A"; // 假设 LI 是 LastName + String sorted = CoreModule.formatAndSortTeamNames(raw); + // L 排在 Z 前面 + assertEquals("G A & LI Si & WU HU & ZHANG San", sorted);// G L W Z + } + + // 8. 内部逻辑:排名解析 (并列排名 =1) + @Test + void testRankParsing() { + // 这里需要测试 parseRankToInt,如果它是私有的,可以通过排序测试间接验证 + // 我们通过反射或修改权限测试:1 应该小于 2 + core.displayResultForEachEvent("Women 10m Platform", false, writer); + // 验证输出的 Rank 顺序是否正确 + } + + // 9. 异常路径:文件不存在&&赛事名称不对 + @Test + void testFileNotFound() { + core.displayResultForEachEvent("InvalidEventName", false, writer); + assertTrue(stringWriter.toString().contains("N/A")); + } + + // 10. 详细模式输出:检查是否有初赛,半决赛,决赛的结果 + @Test + void testDetailScoreFormat() { + // 运行一个存在的 detail 赛事 + core.displayResultForEachEvent("Women 10m Platform", true, writer); + String output = stringWriter.toString(); + if(!output.contains("N/A")) { + assertTrue(output.contains("Preliminary Score"), "比赛结果应包含初赛"); + assertTrue(output.contains("Semifinal Score"), "比赛结果应包含半决赛"); + assertTrue(output.contains("Final Score"), "比赛结果应包含决赛"); + } + } + + //11.非详细输出:检查有无其他成绩 + @Test + void testNoDetailScoreFormat() { + core.displayResultForEachEvent("Women 10m Platform", false, writer); + String output = stringWriter.toString(); + if(!output.contains("N/A")) { + assertTrue(output.contains("Score"), "比赛结果应包含成绩"); + assertFalse(output.contains("Preliminary Score"), "非详细模式结果不包含初赛"); + assertFalse(output.contains("Semifinal Score"), "非详细模式结果不包含半决赛"); + assertFalse(output.contains("Final Score"), "非详细模式结果不包含决赛"); + + } + } +} \ No newline at end of file