Advertisement
Guest User

Q2027847747

a guest
Feb 22nd, 2023
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.50 KB | None | 0 0
  1. package Homework3;
  2.  
  3. import java.net.SocketException;
  4. import java.nio.file.AccessDeniedException;
  5. import java.rmi.server.ExportException;
  6. import java.security.MessageDigest;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.util.ArrayList;
  9. import java.util.Arrays;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Objects;
  13. import java.util.function.Function;
  14.  
  15. /**
  16.  * Правила выполнения домашнего задания:
  17.  *
  18.  * 1. Вся работа выполняется в файле доамашнего задания
  19.  *      Если вас просят создать класс - его надо создать вложенным, т.е. внутри класса HomeWorkN
  20.  *      вы создаете класс MyClass {} (все в одном файле)
  21.  * 2. Задание считается выполненным если все тесты пройдены.
  22.  *      Тест выполнен если напротив него находится знак ✅
  23.  * 3. Что бы запустить тесты нажмите значек запуска кода напротив мтода main.
  24.  *      ‼️ВАЖНО‼️ Вся работа в модкле ведется на JDK-17, перед запуском скачайте его и установите
  25.  *      правильный JDK и уровень языка в Settings -> Project Structure
  26.  */
  27. public class  HomeWork3 {
  28.  
  29.     /**
  30.      * Задание:
  31.      *
  32.      * 1. Реализуйте метод raiseException(ниже) который принимет число и выбрасывает исключения:
  33.      *          если число 1 то выбросить SocketException
  34.      *          если число 2 то выбросить ClassNotFoundException
  35.      *          если число 3 то выбросить AccessDeniedException
  36.      *          если число 4 то выбросить ExportException
  37.      *
  38.      *  2. Реализуйте метод catchException который вызывает raiseException затем ловит каждое
  39.      *     исключение отдельным блоком catch и возвращяет его название:
  40.      *          для SocketException вернуть строку "SocketException"
  41.      *          для ClassNotFoundException вернуть строку "ClassNotFoundException"
  42.      *          для AccessDeniedException вернуть строку "AccessDeniedException"
  43.      *          для ExportException вернуть строку "ExportException"
  44.      */
  45.  
  46.     public static void raiseException(Integer exceptionId) throws SocketException, ClassNotFoundException, AccessDeniedException, ExportException { // Подсказка: throws Exception в итоге надо поменять на перечисление имен исключений
  47.         // Напиши свой код тут для задания 1
  48.         switch (exceptionId) {
  49.             case 1 -> throw new SocketException();
  50.             case 2 -> throw new ClassNotFoundException();
  51.             case 3 -> throw new AccessDeniedException("");
  52.             case 4 -> throw new ExportException("");
  53.         }
  54.     }
  55.  
  56.     public static String catchException(Integer integer) {
  57.         // Напиши свой код тут для задания 2
  58.         try {
  59.             raiseException(integer);
  60.         } catch (SocketException e) {
  61.             return "SocketException";
  62.         } catch (ClassNotFoundException e) {
  63.             return "ClassNotFoundException";
  64.         } catch (AccessDeniedException e) {
  65.             return "AccessDeniedException";
  66.         } catch (ExportException e) {
  67.             return "ExportException";
  68.         }
  69.         return "Exception";
  70.     }
  71.  
  72.     public static void main(String[] args) {
  73.         testFirstTask();
  74.         testSecondTask();
  75.     }
  76.  
  77.     /* Техническая секция - сюда писать ничего не надо */
  78.  
  79.     private static final Map<Integer, Class<? extends Exception>> classesCorrelation = Map.of(
  80.             1, SocketException.class,
  81.             2, ClassNotFoundException.class,
  82.             3, AccessDeniedException.class,
  83.             4, ExportException.class
  84.     );
  85.  
  86.     public static void testFirstTask() {
  87.         System.out.println("\nTests for raiseException");
  88.         AntiCheat.run();
  89.         for (Integer exceptionId : classesCorrelation.keySet().stream().sorted().toList()) {
  90.             try {
  91.                 raiseException(exceptionId);
  92.                 printTestCase(exceptionId, "Должна была выкинуться ошибка", "Ошибка не выкинулась", 45);
  93.             } catch(Exception e) {
  94.                 printTestCase(exceptionId, classesCorrelation.get(exceptionId).toString(), e.getClass().toString(), 45);
  95.             }
  96.         }
  97.     }
  98.  
  99.     public static void testSecondTask() {
  100.         System.out.println("\nTests for catchException"); AntiCheat.run();
  101.         Function<String, String> f = str -> {List<String> r = Arrays.stream(str.split("\\.")).toList();return r.get(r.size() - 1);};
  102.         for (Integer exceptionId : classesCorrelation.keySet().stream().sorted().toList()) printTestCase(exceptionId, f.apply(classesCorrelation.get(exceptionId).toString()), catchException(exceptionId), 30);
  103.     }
  104.  
  105.     public static class AntiCheat {
  106.         public static void run() {
  107.             StringBuilder sb = new StringBuilder("");
  108.             List<String> antiCheatList = new ArrayList<>();
  109.             antiCheatList.addAll(classesCorrelation.keySet().stream().map(Object::toString).toList());
  110.             antiCheatList.addAll(classesCorrelation.values().stream().map(Object::toString).toList());
  111.             antiCheatList.add(sb.toString());
  112.             calcHash(antiCheatList);
  113.         };
  114.  
  115.         public static String bytesToHex(byte[] bytes) {
  116.             char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
  117.             char[] hexChars = new char[bytes.length * 2];
  118.             for (int j = 0; j < bytes.length; j++) {
  119.                 int v = bytes[j] & 0xFF;
  120.                 hexChars[j * 2] = HEX_ARRAY[v >>> 4];
  121.                 hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
  122.             }
  123.             return new String(hexChars);
  124.         }
  125.  
  126.         public static void calcHash(List<String> list) {
  127.             String total = String.join("", list);
  128.             try {
  129.                 MessageDigest md = MessageDigest.getInstance("MD5");
  130.                 md.update(total.getBytes());
  131.                 byte[] digest = md.digest();
  132.                 System.out.println("AntiCheatCheck: " + bytesToHex(digest));
  133.             } catch (NoSuchAlgorithmException ignored) {}
  134.         }
  135.     }
  136.  
  137.     public static String constLen(String str, int len) {
  138.         StringBuilder sb = new StringBuilder(str);
  139.         while (len-- - str.length() > 0) sb.append(" ");
  140.         return sb.toString();
  141.     }
  142.  
  143.     public static void printTestCase(int n, String exp, String act, int minLen) {
  144.         Function<String, String> green = str -> "\u001B[34m" + str + "\u001B[0m";
  145.         Function<String, String> yellow = str -> "\u001B[33m" + str + "\u001B[0m";
  146.         System.out.print( "TEST CASE " + constLen(String.valueOf(n), 4));
  147.         System.out.print( "Ожидание: " + yellow.apply(constLen(exp, minLen)) + " Реальность: " + green.apply(constLen(act, minLen) + " "));
  148.         if (Objects.equals(exp, act)) System.out.print("✅"); else System.out.print("❌");
  149.         System.out.println();
  150.     }
  151.  
  152. }
  153.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement