Created
November 16, 2021 23:36
-
-
Save rmuhamedgaliev/86b9605cc1f2815ebddca9a25e7bc04f to your computer and use it in GitHub Desktop.
TestTask.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.time.LocalDate; | |
import java.util.Arrays; | |
import java.util.Scanner; | |
public class Scratch { | |
// Название метода не соотвествует содержимому в методе, он просто проверяет год, но на что проверяет не понятно | |
public static void checkYear(int year) { | |
// Для человека не знакомого с сутью проверки не очень понятно что означает 4, 100, 400? Это называется | |
// "магические перменные", так же я бы выделил это условие на разные логические соотвляющие с префиксом is | |
// Печать стоило бы разделить от проверки, так как например в будущем вы захотите вывести результат в файл | |
// или в HTTP | |
// Так же не выполнено условие по сообщению | |
// Результат программы выведите в консоль. Если год високосной, то должно быть выведено “номер года – | |
// високосный год”. Если год не високосный, то, соответственно : “номер года – не високосный год” | |
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { | |
System.out.printf("%d is a leap year\n", year); | |
} else { | |
System.out.printf("%d is not a leap year\n", year); | |
} | |
} | |
public static void checkOS(int deviceYear, int clientOS) { | |
int currentYear = LocalDate.now().getYear(); | |
// Проверку системы стоит выделить в отдельный метод и возвращать назвагние строкой | |
// Стоит избавиться от магических переменных, а завести через константы | |
if (clientOS == 1) { | |
// Проверка дублируется и вообще сообщения тоже дублируются необходимо подумать надо декомпозицией метода | |
// для избавления от дублирования | |
if (deviceYear < currentYear) { | |
System.out.println("Install the lite-version for iOS at the link"); | |
} else if (deviceYear == currentYear) { | |
System.out.println("Install the full-version for iOS at the link"); | |
} else { | |
System.out.println("Incorrect input!"); | |
} | |
// Стоит избавиться от магических переменных, а завести через константы | |
} else if (clientOS == 0) { | |
// Проверка дублируется | |
if (deviceYear < currentYear) { | |
System.out.println("Install the lite-version for Android at the link"); | |
} else if (deviceYear == currentYear) { | |
System.out.println("Install the full-version for Android at the link"); | |
} else { | |
System.out.println("Incorrect input!"); | |
} | |
} else { | |
System.out.println("Incorrect input!"); | |
} | |
} | |
// Проверку на крайние кейсы необходимо вынести в начало метода, что бы метод отработал быстрее и не затрагивал | |
// логику, так же я бы рекомендовал проверить услование, например если мы напишем значение 200, то по времени | |
// доставки оно будет равно для дистанции 100 - этого немного странно. Лучше уточнить и проработать алгоритм | |
// расчета времени доставки | |
public static int calcDeliveryTime(int deliveryDistance) { | |
int deliveryTime = 1; | |
if (deliveryDistance > 20) { | |
deliveryTime++; | |
} | |
if (deliveryDistance > 60) { | |
deliveryTime++; | |
} | |
if (deliveryDistance <= 0) { | |
System.out.println("Incorrect input!"); | |
return 0; | |
} | |
return deliveryTime; | |
} | |
public static void checkDoubles(String str) { | |
for (int i = 0; i < str.length() - 1; i++) { | |
// Я бы выделил в переменные str.charAt(i) например. char current = str.charAt(i), что бы было более | |
// понятнее | |
if (str.charAt(i) == str.charAt(i + 1)) { | |
System.out.printf("Duplicate character '%c' found.\n", str.charAt(i)); | |
return; | |
} | |
} | |
System.out.println("Duplicate characters not found."); | |
} | |
// Не экономьте символы и не сохраняйте перменные вида 't', очевиднее будет tail | |
public static void reverseArrayOrder(int[] arr) { | |
for (int i = 0; i < arr.length / 2; i++) { | |
int t = arr[i]; | |
// Тут повторяется индекс - (arr.length - i - 1) так легко ошибится, лучше сохзраняйте в перменные такие | |
// значения | |
arr[i] = arr[arr.length - i - 1]; | |
arr[arr.length - i - 1] = t; | |
} | |
} | |
public static int[] generateRandomArray() { | |
java.util.Random random = new java.util.Random(); | |
// Для гибкости данное значение 30 можно вынести в аргумент | |
int[] arr = new int[30]; | |
for (int i = 0; i < arr.length; i++) { | |
arr[i] = random.nextInt(100_000) + 100_000; | |
} | |
return arr; | |
} | |
public static double getAverage(int[] arr) { | |
double sum = getSum(arr); | |
// Лучше вынести этот шаг в отдельный метод который будет считать среднее значение, так как из логики не | |
// совсем пожет быть ясно что скрывается за понятием arr.length, а по настоящему это количество дней | |
double averageValue = sum / arr.length; | |
// предыдущей результат можно сразу возвращать из функции | |
return averageValue; | |
} | |
public static double getSum(int[] arr) { | |
int sum = 0; | |
for (int i = 0; i < arr.length; i++) { | |
sum += arr[i]; | |
} | |
return sum; | |
} | |
// Тут полностью отсуствует обработка ошибок и например если ввести неверное значение, то приложение попросту падает | |
// Советовал бы реализовать простое меню, котрое содержит обработку ошибок и выбор задания | |
public static void main(String[] args) { | |
//task1 | |
Scanner input = new Scanner(System.in); | |
System.out.print("Enter the year: "); | |
int y = input.nextInt(); | |
checkYear(y); | |
//task2 | |
System.out.print("Enter the year of manufacture of the device: "); | |
int deviceYear = input.nextInt(); | |
System.out.print("Enter 0 if you have Android OS or 1 if iOS: "); | |
int deviceOS = input.nextInt(); | |
checkOS(deviceYear, deviceOS); | |
//task3 | |
System.out.print("Enter the distance: "); | |
int dist = input.nextInt(); | |
System.out.printf("Delivery will take %d days.\n", calcDeliveryTime(dist)); | |
//task4 | |
System.out.print("Enter some line: "); | |
String s = input.next(); | |
checkDoubles(s); | |
input.close(); | |
//task5 | |
int[] array = {3, 2, 1, 6, 5}; | |
reverseArrayOrder(array); | |
System.out.println("The reversed array looks like this: " + Arrays.toString(array)); | |
//task6 | |
int[] arr = generateRandomArray(); | |
double averageArr = getAverage(arr); | |
System.out.printf("The average expenditure was %.2f rubles. \n", averageArr); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment