Привет! Читаю книгу, после каждой главы - задания.
Пользователь вводит числа через пробелы. Программа должна выводить:
Четные числа
Нечетные числа
Наибольшее число
Наименьшее число
Числа, которые делятся на 3 или на 9 (без остатка)
Числа, которые делятся на 5 и на 7 (без остатка)
Элементы, расположенные методом пузырька по убыванию модулей
Трехзначные числа, в записи которых нет повторяющихся цифр
Наибольший общий делитель
Наименьшее общее кратное
Простые числа
Числа, отсортированные по возрастанию
Числа, отсортированные по убыванию
Числа в порядке убывания частоты встречаемости
Требуется критика кода. Представьте, что вы смотрите код на собеседовании.
public class Main
{
static Integer[] bubble;
public static void main(String[] args)
{
//setup
System.out.println("Введите числа через пробелы");
String[] arr = new Scanner(System.in).nextLine().split(" ");
ArrayList
min = Math.min(min, i);
max = Math.max(max, i);
if (Math.abs(i % 2) == 0) ch.add(i);
else unch.add(i);
if (i % 3 == 0 || i % 9 == 0) ch39.add(i);
if (i % 5 == 0 && i % 7 == 0) ch57.add(i);
if (s.length() == 3)
{
String a = s.substring(0, 1);
String b = s.substring(1, 2);
String c = s.substring(2, 3);
if (! a.equals(b) && ! b.equals(c) && ! c.equals(a))
{
z300.add(i);
}
}
nod = gcd(nod, i);
lcm = lcm(lcm, i);
int b;
int num;
for (b = min; b <= max; b++)
{
int counter = 0;
for(num = b; num >= 1; num--)
{
if(b % num==0)
{
counter = counter + 1;
}
}
if (counter == 2)
{
if(!primes.contains(b))
primes.add(b);
}
}
}
//unch
System.out.print("
Нечетные : ");
for (int unchitem : unch) System.out.print(unchitem + ", ");
//ch
System.out.print("
Четные : ");
for (int chitem : ch) System.out.print(chitem + ", ");
//ch39
System.out.print("
Делятся на 3 или 9 : ");
for (int ch39item : ch39) System.out.print(ch39item + ", ");
//ch57
System.out.print("
Делятся на 5 и 7 : ");
for (int ch57item : ch57) System.out.print(ch57item + ", ");
//z300
System.out.print("
Трехзначные числа без повторяющихся цифр : ");
for (int z300item : z300) System.out.print(z300item + ", ");
sort();
System.out.print("
По возрастанию : ");
for (int upitem : bubble) System.out.print(upitem + ", ");
unsort();
System.out.print("
По убыванию : ");
for (int downitem : bubble) System.out.print(downitem + ", ");
bubbleSort();
System.out.print("
Пузырек : ");
for (int bubbleitem : bubble) System.out.print(bubbleitem + ", ");
final ArrayList
System.out.print("
Числа в порядке убывания встречаемости : ");
for (int primesitem : array) System.out.print(primesitem + ", ");
System.out.print("
Простые числа : ");
for (int primesitem : primes) System.out.print(primesitem + ", ");
//min & max & nod & nok
System.out.println("
Минимальное число: " + min);
System.out.println("Максимальное число: " + max);
System.out.println("Наибольший общий делитель: " + nod);
System.out.println("Наименьшее общее кратное: " + lcm);
}
public static int gcd(int a, int b)
{
if (b == 0) return Math.abs(a);
return gcd(b, a % b);
}
public static int lcm(int a,int b){
return a / gcd(a,b) * b;
}
public static void bubbleSort()
{
for (int i=bubble.length - 1;i > 0;i--)
{
for (int j = 0;j < i;j++)
{
if (Math.abs(bubble[j]) <= Math.abs(bubble[j + 1]))
{
int tmp=bubble[j];
bubble[j] = Math.abs(bubble[j + 1]);
bubble[j + 1] = Math.abs(tmp);
}
}
}
}
public static void sort()
{
for (int i = bubble.length - 1; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
if (bubble[j] >= bubble[j + 1])
{
int tmp = bubble[j];
bubble[j] = bubble[j + 1];
bubble[j + 1] = tmp;
}
}
}
}
public static void unsort()
{
for (int i = bubble.length - 1; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
if (bubble[j] < bubble[j + 1])
{
int tmp=bubble[j];
bubble[j] = bubble[j + 1];
bubble[j + 1] = tmp;
}
}
}
}
UPD
Как мог упростил.
public class Main
{
public static ArrayList
public static void main(String[] args)
{
System.out.println("Введите числа через пробелы");
String[] arr = new Scanner(System.in).nextLine().split(" ");
nums = new ArrayList<>();
//перевод в Integer
for (String str : arr)
{
nums.add(Integer.parseInt(str));
}
//создаем списки
ArrayList
int first = nums.get(0);
int min = Collections.min(nums);
int max = Collections.max(nums);
int nod = first;
int lcm = first;
for (Integer i : nums)
{
String s = "" + i;
if (Math.abs(i % 2) == 0) ch.add(i);
else unch.add(i);
if (i % 3 == 0 || i % 9 == 0) ch39.add(i);
if (i % 5 == 0 && i % 7 == 0) ch57.add(i);
if (s.length() == 3)
{
String a = s.substring(0, 1);
String b = s.substring(1, 2);
String c = s.substring(2, 3);
if (! a.equals(b) && ! b.equals(c) && ! c.equals(a))
{
z300.add(i);
}
}
nod = nod(nod, i);
lcm = nok(lcm, i);
for(int r =2; r <= i/2; r++)
{
if(i % r != 0)
{
primes.add(i);
break;
}
}
}
output("Четные", ch);
output("Нечетные", unch);
output("Делятся на 3 или 9", ch39);
output("Делятся на 5 и 7", ch57);
output("Трехзначные числа без повторяющихся цифр", z300);
output("Простые числа", primes);
//сортируем по возрастанию
sort(false);
output("По убыванию", nums);
//переворачиваем список и получаем список по возрастанию
Collections.reverse(nums);
output("По возрастанию", nums);
//сортируем по частоте встречаемости
Collections.sort(nums, new Comparator
output("Числа в порядке убывания встречаемости", nums);
//сортируем по убыванию модулей
sort(true);
output("По убыванию модулей", nums);
System.out.println("
Минимальное число: " + min);
System.out.println("Максимальное число: " + max);
System.out.println("Наибольший общий делитель: " + nod);
System.out.println("Наименьшее общее кратное: " + lcm);
}
public static int nod(int a, int b)
{
if (b == 0) return Math.abs(a);
return nod(b, a % b);
}
public static int nok(int a, int b)
{
return a / nod(a, b) * b;
}
public static void sort(boolean bubble)
{
if(bubble) {
for(int b = 0; b < nums.size(); b++)
nums.set(b, Math.abs(nums.get(b)));
}
Collections.sort(nums, new Comparator
public static void output(String text, List
" + text + " : ");
for (int i : list) System.out.print(i + ", ");
}
Ответ
В принципе неплохо. Где-то на 4-ку.
Небольшие замечания:
Не выдерживается стиль операторов if/else/for в случаях когда в теле есть 1 оператор. Вы либо пишите их без скобок и с новой строки или со скобками.
Хорошо бы таки сделать хоть какие-то классы, а не все пихать через static
Метод output() надо сделать чтобы принимал PrintStream, тогда можно будет отправлять хоть куда, например в файл - но это уже придирки.
P.S. Collections.sort() - сортирует методом Quick Sort - условия задачи это разрешают?
Комментариев нет:
Отправить комментарий