Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192

Задачник справочника "Java в примерах" Флэнагана, с подстрочником и комментариями по теме

25.12.2017, 16:19. Показов 3956. Ответов 77
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, прошу участия в разборе задач.
Выкладываю задачи, как могу комментирую с точки зрения начинающего, выделяю непонятные действия
прошу подправлять и писать свои замечания. Дело нужное и избавит от многих однотипных вопросов.
С уважением

Задача № 1. Вычисление максимального простого числа.

Комментарии к каждой строке.
То что вызывает сомнения - выделено курсивом.
Ну и сам ответ - ну очень подозрителен.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*Описание программы:
 * Эта программа вычисляет простые числа, применяя алгоритм "Решето Эратосфена":
 *уберите числа, кратные меньшим простым числам, и все оставшиеся будут простыми.
 * 
 *Программа печатает наибольшее число, не превосходящее аргумент, заданный в командной строке.*/
 
/* метод Integer.parseInt() для преобразования в число строки символов, заданной
в командной строке*/
 
public class Pr_1_7_Sieve6 {
 
    public static void main(String[] args) {
        /*Мы вычисляем все простые числа, не превосходящие заданного значения, или,
         *если аргумент не указан, все простые числа, не превосходящие 100. // ГДЕ УКАЗЫВАЕТСЯ АРГУМЕНТ????????? */
        
//1. Обявляем переменную с максимальным значением ЧЕГО????  
        
        int max = 100;                             // Присваиваем значение ЧЕГО?????, принимаемое по умолчанию. 
        try { max=Integer.parseInt (args[0]);}     // Анализируем заданный пользователем аргумент НА ПРЕДМЕТ ЧЕГО??????
        catch (Exception e) {}                     // Молча игнорируем исключения.
        
//2. создаем массив isprime, где для каждого числа указанно простое оно или нет. 
        
        boolean [] isprime = new boolean [max+1]; // Инициализируем массив isprime ддя 100+1 (ЗАЧЕМ 100+1??????)
        for (int i=0; i<max; i++) isprime[i]=true;// Заполняем массив isprime, предполагая, что все чила простые, пока не доказанно обратное.
        isprime[0]=isprime[1]=false;              // Исключаем из полуменного массива 0 и 1, - ня являются простыми по умолчанию.
        
    //2.1 Чтобы вычислить все простые числа меньше max, нужно убрать числа кратные всем цеым, меньшим, чем кадратный корень из max
        
        int n = (int)Math.ceil(Math.sqrt(max));    // Обьявляем переменную n ДЛЯ ЧИСЛА MAX ОБРАБОТАННУЮ В  java.lang.Math.
    
    /*2.2 Проводим перебор по кратным числам, теперь для каждого целого i от 0 до n:
                                                     *    - Если i простое число, тогда никакое из кратных ему не является простым, отмечаем это в массиве.,
                                                     *    - Если i не простое число, кратные ему уже удалены, значит этот случай пропускаем*/
        
        for (int i =0; i<=n; i++) {                 
            if (isprime [i])                        //Если i простое число
                for (int j=2*i; j<=max; j=j+1)      //цикл по кратным,
                    isprime [j] = false;//они не являются простыми.
            }
//3. Находим наибольшее простое из оставшегося массива isprime [i]  (ТОЧНО, что i ?????)
        int largest;
        for (largest=max; !isprime[largest]; largest--) ; // Пустое тело цикла
        System.out.println("Наибольшее простое число, не превосходящее " + max + //Вывод результата
                " это " + largest);
        System.out.println("Получается хрень: где число 97 например ");           //оценка кода
        
    }
 
}


Добавлено через 5 минут
Помидорами прошу не кидать.
Что учу - то и выкладываю, хороших задачников с разбором полетов - нет, давайте сделаем.
Эти задачи из справочника "Javaв примерах" Флэнагана
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2017, 16:19
Ответы с готовыми решениями:

Задачник по java
Изучаю джаву. Получается плохо, ибо немогу теорию без практики. мне нужны практические упражнения, для закрепления навыков, так сказать. В...

Посоветуйте задачник по Java
сабж, только в раздел java se не отсылайте, плохой это задачник. задачи, естесно, не для начинающих (то бишь что нибудь сильно сложнее...

Нужен автоматизированный задачник по java
Здравствуйте, ищу автоматизированный задачник для Java на подобии PT4 для pascal. С данной темой ознакомился, однако крайне неудобно...

77
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
26.12.2017, 23:30
Студворк — интернет-сервис помощи студентам
Ты создаешь новый объект - экземпляр класса, но никакой переменной не присваиваешь, ссылки на него нет. Т.е. он вроде бы где-то есть, но работать ты с ним не можешь.
1
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
27.12.2017, 02:20  [ТС]
И что, кто скажет, что этот ответ больше никому не понадобится?

Добавлено через 9 минут
А это тогда что:
int res1 = WMetod2Summa.field2(q);

Добавлено через 2 часа 34 минуты
Итак оркестр!!!!!
Задача № 2.
Для ряда чисел от 0 до N найти: сумму всех четных чисел,
сумму всех нечетных чисел,
сумму всех чисел кратных 3,
сумму всех чисел кратных 5.

Находим сумму различных чисел по формуле прогрессии S = (A1 + An)*n/2.
где А1 -певое расчётное число, Аn - последнее расчётное число,
n - количество расчётных чисел в ряду от 0 до N.

1. Класс Main:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class WMainSumma {
 
    public static void main(String[] args) {
 
        int N = 10; //Ввод числа N
        System.out.println("Число N= " + N);
        System.out.print("Ряд чисел от 0 до N: ");
        for (int i = 0; i <= N; i++) {
            System.out.print(i + ", ");
        }
        System.out.println();
        System.out.println("-----------------------------------");
        
        int res1 = WMetod2Summa.field2(N);
        String t1 = WMetod2Summa.field2();
        System.out.println(t1 + res1 + ".");
        System.out.println("-----------------------------------");
        
        int res2 = WMetodNot2Summa.fieldNot2(N);
        String t2 = WMetod2Summa.field2();
        System.out.println(t2 + res2 + ".");
        System.out.println("-----------------------------------");
        
        int res3 = WMetod3Summa.field3(N);
        String t3 = WMetod3Summa.field3();
        System.out.println(t3 + res3 + ".");
        System.out.println("-----------------------------------");
        
        int res5 = WMetod5Summa.field5(N);
        String t5 = WMetod5Summa.field5();
        System.out.println(t5 + res5 + ".");
        System.out.println("-----------------------------------");
        }
}
Метод для четных чисел:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class WMetod2Summa {
 
    public static String field2() {
        String t1 = "Сумма всех нечётных чисел от 0 до N = ";
        return t1;
    }
 
    public static int field2(int N) {
 
        int An, n;
        int A1 = N / N + 1;
        if (N % 2 == 0) {
            An = N;
            n = N / 2;
            System.out.println("Первое четное число: " + A1 + ". Последнее четное число: " + An + ". Количество 
                         четных чисел в ряду: " + n);
        } else {
            An = N - 1;
            n = (N - 1) / 2;
            System.out.println("Первое четное число: " + A1 + ". Последнее четное число: " + An + ". Количество 
                         четных чисел в ряду: " + n);
        }
        return (A1 + An) * n / 2;
        }
 
}
Метод для нечетных чисел:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class WMetodNot2Summa {
    
    public static String field2() {
        String t = "Сумма всех чисел нечётных от 0 до N = ";
        return t;}
    
    
    
    public static int fieldNot2(int N) {
            int An,n;       
        int A1 = N/N;  
        if (N%2!=0)       
        {An = N;         
         n = (N+1)/2;
         System.out.println("Первое нечетное число: " + A1 + ". Последнее нечетное число: " + An + ". Количество нечетных 
          чисел в ряду: " + n);}
        else                                
        { An = N-1;
        n = (N+1)/2;
        System.out.println("Первое нечетное число: " + A1 + ". Последнее нечетное число: " + An + ". Количество нечетных 
         чисел в ряду: " + n);}
        
        return (A1 + An)*n/2;}
}
Метод для чисел кратных 3-м:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class WMetod3Summa {
    public static String field3() {
        String t3 = "Сумма всех чисел кратных 3м от 0 до N = ";
        return t3;
    }
 
    public static int field3(int N) {
        int An, n;
        int A1 = N / N + 2;
        if (N % 3 == 0) {
            An = N;
            n = (N + 1) / 3;
            System.out.println("Первое кратное 3м число: " + A1 + ". Последнее кратное 3м число: " + An    + ". 
                        Количество кратных 3м чисел в ряду: " + n);
        } else if ((N - 1) % 3 == 0) {
            An = N - 1;
            n = (N + 1) / 3;
            System.out.println("Первое кратное 3м число: " + A1 + ". Последнее кратное 3м число: " + An    + ". 
                        Количество кратных 3м чисел в ряду: " + n);
        } else {
            An = N - 2;
            n = (N) / 3;
            System.out.println("Первое кратное 3м число: " + A1 + ". Последнее кратное 3м число: " + An    + ". 
                        Количество кратных 3м чисел в ряду: " + n);
        }
 
        return (A1 + An) * n / 2;
    }
}
Метод для чисел кратных 5-и:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class WMetod5Summa {
    public static String field5() {
        String t5 = "Сумма всех чисел кратных 5-и от 0 до N = ";
        return t5;
    }
 
    public static int field5(int N) {
        int An, n; // Обьявляем переменные Аn и Nn
        int A1 = N / N + 4; // Обьявляем и вычисляем переменную А1
        if (N % 5 == 0) // Проверяем на кратность 3 последнее число, если да, то:
        {
            An = N;
            n = (N + 1) / 5;
            System.out.println("Первое кратное 5-и число: " + A1 + ". Последнее кратное 5-и число: " + An
                    + ". Количество кратных 5-и чисел в ряду: " + n);
        } else if ((N - 1) % 5 == 0) // если нет, то если:
        {
            An = N - 1;
            n = (N + 1) / 5;
            System.out.println("Первое кратное 5-и число: " + A1 + ". Последнее кратное 5-и число: " + An
                    + ". Количество кратных 5-и чисел в ряду: " + n);
        } else if ((N - 2) % 5 == 0) // если нет, то если:
        {
            An = N - 1;
            n = (N + 1) / 5;
            System.out.println("Первое кратное 5-и число: " + A1 + ". Последнее кратное 5-и число: " + An
                    + ". Количество кратных 5-и чисел в ряду: " + n);
        } else if ((N - 3) % 5 == 0) // если нет, то если:
        {
            An = N - 1;
            n = (N + 1) / 5;
            System.out.println("Первое кратное 5-и число: " + A1 + ". Последнее кратное 5-и число: " + An
                    + ". Количество кратных 5-и чисел в ряду: " + n);
        } else // если нет, то:
        {
            An = N - 4;
            n = (N) / 5;
            System.out.println("Первое кратное 5-и число: " + A1 + ". Последнее кратное 5-и число: " + An
                    + ". Количество кратных 5-и чисел в ряду: " + n);
        }
 
        return (A1 + An) * n / 2;
    }
}
Результат в консоль:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Число N= 10
Ряд чисел от 0 до N: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
-----------------------------------
Первое четное число: 2. Последнее четное число: 10. Количество четных чисел в ряду: 5
Сумма всех нечётных чисел от 0 до N = 30.
-----------------------------------
Первое нечетное число: 1. Последнее нечетное число: 9. Количество нечетных чисел в ряду: 5
Сумма всех нечётных чисел от 0 до N = 25.
-----------------------------------
Первое кратное 3м число: 3. Последнее кратное 3м число: 9. Количество кратных 3м чисел в ряду: 3
Сумма всех чисел кратных 3м от 0 до N = 18.
-----------------------------------
Первое кратное 5-и число: 5. Последнее кратное 5-и число: 10. Количество кратных 5-и чисел в ряду: 2
Сумма всех чисел кратных 5-и от 0 до N = 15.
-----------------------------------
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.12.2017, 07:32
int res1 = WMetod2Summa.field2(q);
Это ты присваиваешь переменной результат выполнения метода.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
27.12.2017, 08:16
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
И что, кто скажет, что этот ответ больше никому не понадобится?
Я скажу. Ужасный код, который никому нельзя показывать.

Хотя бы как-то так

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import java.util.stream.IntStream;
 
public final class IntArithmeticProgressionBounds {
 
    private static final long NOT_FOUND = Long.MIN_VALUE;
 
    private static final IntArithmeticProgressionBounds EMPTY = new IntArithmeticProgressionBounds(0, 0, 0);
 
    public static IntArithmeticProgressionBounds empty() {
        return EMPTY;
    }
 
    public static IntArithmeticProgressionBounds of(int first, int last, int count) {
        if (count == 0) {
            return EMPTY;
        }
        return new IntArithmeticProgressionBounds(first, last, count);
    }
 
    public static IntArithmeticProgressionBounds from(IntStream xs) {
        final Builder builder = new Builder();
        xs.forEach(builder::accept);
        return from(builder);
    }
 
    public static IntArithmeticProgressionBounds from(Builder builder) {
        if (builder.count == 0) {
            return EMPTY;
        }
        return new IntArithmeticProgressionBounds((int) builder.first, builder.last, builder.count);
    }
 
    public static Builder builder() {
        return new Builder();
    }
 
    private final int first;
    private final int last;
    private final int count;
 
    private IntArithmeticProgressionBounds(int first, int last, int count) {
        this.first = first;
        this.last = last;
        this.count = count;
    }
 
    public int getFirst() {
        return first;
    }
 
    public int getLast() {
        return last;
    }
 
    public int getCount() {
        return count;
    }
 
    public boolean isEmpty() {
        return count == 0;
    }
 
    public int sum() {
        return (first + last) * count / 2;
    }
 
    @Override
    public String toString() {
        if (isEmpty()) {
            return "{ 0 }";
        }
        return String.format("{ %d..%d | n = %d }", first, last, count);
    }
 
    public static final class Builder {
 
        private long first = NOT_FOUND;
        private int last = 0;
        private int count = 0;
 
        private Builder() {
        }
 
        public void accept(int x) {
            if (first == NOT_FOUND) {
                first = x;
            }
            last = x;
            count++;
        }
 
        public IntArithmeticProgressionBounds build() {
            return IntArithmeticProgressionBounds.from(this);
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.function.IntPredicate;
import java.util.function.Supplier;
import java.util.stream.IntStream;
 
public final class ArithmeticProgressions {
 
    public static void main(String[] args) {
        final int n = 10;
        final Supplier<IntStream> xs = () -> IntStream.rangeClosed(1, n);
        printArithmeticProgressionSum("Evens   ", xs, x -> (x & 1) == 0);
        printArithmeticProgressionSum("Odds    ", xs, x -> (x & 1) == 1);
        printArithmeticProgressionSum("Div by 3", xs, x -> (x % 3) == 0);
        printArithmeticProgressionSum("Div by 5", xs, x -> (x % 5) == 0);
    }
 
    private static void printArithmeticProgressionSum(String title, Supplier<IntStream> xsSupplier, IntPredicate predicate) {
        final IntArithmeticProgressionBounds bounds = IntArithmeticProgressionBounds.from(xsSupplier.get().filter(predicate));
        System.out.printf("%s sum = %d for %s%n", title, bounds.sum(), bounds);
    }
}
Code
1
2
3
4
Evens    sum = 30 for { 2..10 | n = 5 }
Odds     sum = 25 for { 1..9 | n = 5 }
Div by 3 sum = 18 for { 3..9 | n = 3 }
Div by 5 sum = 15 for { 5..10 | n = 2 }
1
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
27.12.2017, 11:13  [ТС]
korvin_, Да..., до библиотек я пока не дошел.
Код компактный, подстрочники бы ещё к нему, но будем
разбираться. Спасибо.

Добавлено через 1 час 28 минут
Тем кто идет следом.....
полезная тема
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
27.12.2017, 17:15
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
подстрочники
Понятия не имею, что это.
0
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
27.12.2017, 18:33  [ТС]
Извини, имел в виду построчные комментарии к коду

Добавлено через 23 минуты
Тоже задачи из разряда для начинающих.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
27.12.2017, 18:49
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
построчные комментарии
Ни разу таких не видел. Все нормальные люди пишут комментарии или перед (декларацией/вызовом) или слева.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
27.12.2017, 20:33
Сергей_СПб, знаете, может Вам стоит читать уже что-нибудь более современное о языке Java?.. Поскольку нынче задачи суммирования по условию, к примеру, решаются несколько... иначе, что ли. В порядке иллюстрации:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, 12, -31, 33, 87, -17}; //исходный массив
        int[] dividers = {2, 3, 4, 5, 6}; //делители
        for (int temp : dividers) { //цикл перебора делителей
            System.out.printf("В заданном массиве сумма чисел, кратных %d равна %d%n", temp, summationSeries(array, p -> p % temp == 0)); //вычисление суммы чисел, кратных заданному
        }
        System.out.printf("Сумма чисел больших 9 равна %d%n", summationSeries(array, n -> n > 9)); //вычисление суммы чисел больших девяти
        System.out.printf("Сумма всех нечётных чисел равна %d%n", summationSeries(array, n -> n % 2 != 0)); //вычисление суммы нечётных чисел
        System.out.printf("Сумма чисел меньше 0 равна %d", summationSeries(array, n -> n < 0)); //вычисление суммы чисел меньше нуля
 
    }
 
    public static int summationSeries(int[] array, Predicate<Integer> predicate) {
        int sum = 0;
        for (int temp : array) { //пробегаем по заданному массиву
            if (predicate.test(temp)) { //проверяем число из массива на соответствие задаваемому условию
                sum += temp; //при удачной проверке суммируем
            }
        }
        return sum;
    }
}
Специально для Вас пояснил какая строка кода что, приблизительно, делает.
1
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
27.12.2017, 23:26  [ТС]
HOBATOP, спасибо. Я думаю, что не только для меня.
По вашему замечанию - вчера попалась фраза, по моему о книге "Хорстманн К.С., Корнелл Г. - Java 2",
дословно не помню, но смысл в том что, книги первых изданий были очень подробные и темы разжёваны для новичков, а с развитием самого языка Java, с появлением библиотек, подобные учебники разбухли бы до 10-ка томов, поэтому в новых изданиях дается все сжато и с упором на новое. Я в этом деле полный ноль, но дойду и до Вашего уровня, не сомневаюсь, другое дело, что времени мало. За построчные пояснения - благодарен.
С уважением

Добавлено через 2 часа 35 минут
Задача 1. Источник
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/
* Написать класс, содержащий метод, который рассчитывает и выводит
 * таблицу умножения от/до заданных пользователем значений. 
 * Значения пользователя передаются в виде параметров метода.
 * Показать пример использования реализованного класса. */
 
public class Tabl {
 
    public static void main(String[] args) {
        
        int x=15;  // x max - верхняя граница таблицы
        int y=15;  // y max 
        int xa=3;  // x min - нижняя граница таблицы
        int ya=5;  // y min
        int res1=TablMetod.metod(x,y,xa,ya); // объявление переменной res1 и передача значений в метод
    }
}
Сам метод:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class TablMetod {
 
    public static int metod(int x, int y,int xa, int ya) {
        int res1=0;
        
        for (int i= xa; i<=x; i++) {
            for (int q= ya; q<=y; q++) {
                res1=i*q;
                System.out.print (i+"*"+q+"="+res1+"    ");
                if (q==y) {System.out.println ();}
            }
        }
        return res1;
    }   
 
}
А как бы это написали Вы?? Только без импорта библиотек, по простому "в лоб".
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
27.12.2017, 23:37
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
if (q==y) {System.out.println ();}
убрать if и поставить на строчку ниже
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
int res1=TablMetod.metod(x,y,xa,ya)
в данном случае переменная res1 не нужна, просто вызываем метод, который возвращает void, соотв. убираем
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
return res1;
В методе можно выкинуть переменную res1 вообще
1
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
27.12.2017, 23:51  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
возвращает void, соотв. убираем
именно убираем: вместо int metod ставим void metod.

чёто никто не ругается, либо надоел, либо у меня получается.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
28.12.2017, 00:30
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
А как бы это написали Вы?
Явно не так, как ты.

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public final class Trash {
 
    public static void main(String[] args) {
        final Range xs = new Range(3, 15);
        final Range ys = new Range(5, 15);
        printProductTable(xs, ys);
    }
 
    private static void printProductTable(Range xs, Range ys) {
        final int plen = length(xs.max * ys.max) + 2;
        final int xlen = length(xs.max);
        final String pfmt = String.format("%%%dd", plen);
        final String xfmt = String.format("%%%dd |", xlen);
        printf(makeString(xlen+1, ' ') + "|");
        for (int y = ys.min; y <= ys.max; y++) {
            printf(pfmt, y);
        }
        println();
        print(makeString(xlen+1, '-') + "+");
        print(makeString(plen*(ys.max-ys.min+1), '-'));
        println();
        for (int x = xs.min; x <= xs.max; x++) {
            printf(xfmt, x);
            for (int y = ys.min; y <= ys.max; y++) {
                printf(pfmt, x * y);
            }
            println();
        }
    }
 
    private static final class Range {
 
        private final int min;
        private final int max;
 
        private Range(int min, int max) {
            this.min = min;
            this.max = max;
        }
    }
 
    private static int length(int number) {
        if (number < 0) {
            return 1 + length(-number);
        }
        if (number == 0) {
            return 1;
        }
        int length = 0;
        for (int n = number; n > 0; n /= 10) {
            length++;
        }
        return length;
    }
 
    private static void print(String s) {
        System.out.print(s);
    }
 
    private static void printf(String format, Object... args) {
        System.out.printf(format, args);
    }
 
    private static void println() {
        System.out.println();
    }
 
    private static String makeString(int n, char c) {
        final char[] chars = new char[n];
        for (int i = 0; i < n; i++) {
            chars[i] = c;
        }
        return String.copyValueOf(chars);
    }
}


Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   |    5    6    7    8    9   10   11   12   13   14   15
---+-------------------------------------------------------
 3 |   15   18   21   24   27   30   33   36   39   42   45
 4 |   20   24   28   32   36   40   44   48   52   56   60
 5 |   25   30   35   40   45   50   55   60   65   70   75
 6 |   30   36   42   48   54   60   66   72   78   84   90
 7 |   35   42   49   56   63   70   77   84   91   98  105
 8 |   40   48   56   64   72   80   88   96  104  112  120
 9 |   45   54   63   72   81   90   99  108  117  126  135
10 |   50   60   70   80   90  100  110  120  130  140  150
11 |   55   66   77   88   99  110  121  132  143  154  165
12 |   60   72   84   96  108  120  132  144  156  168  180
13 |   65   78   91  104  117  130  143  156  169  182  195
14 |   70   84   98  112  126  140  154  168  182  196  210
15 |   75   90  105  120  135  150  165  180  195  210  225
Добавлено через 1 минуту
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
либо у меня получается
Нифига у тебя не получается. Лучше «Code Complete» МакКоннела или «Clean Code» Роберта Мартина почитай, прежде чем за программирование браться.
0
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
28.12.2017, 12:12  [ТС]
Все у меня получается!
За пример спасибо. За наводку - тоже.

Добавлено через 10 часов 32 минуты
Примерно так да?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public static void main(String[] args) {
        final Range xs = new Range(3, 15);  //метод final может быть инициализирована только один раз. Ссылочная переменная, объявленная как final, никогда не может быть назначен для обозначения другого объекта.
        final Range ys = new Range(5, 15);  //оператор new создает экземпляр метода и выделяет память под переменную
        printProductTable(xs, ys);          //вызываем класс printProductTable, который возвращает void
    }
 
    private static void printProductTable(Range xs, Range ys) {
        final int plen = length(xs.max * ys.max) + 2;   // length() возвращает длину последовательности символов, представленного этим объектом
        final int xlen = length(xs.max);
        final String pfmt = String.format("%%%dd", plen); // String.format - метод вместо вывода строки сохраняет ее как отформатированную строку.
        final String xfmt = String.format("%%%dd |", xlen);
        printf(makeString(xlen+1, ' ') + "|");  ////вызываем метод printf,
        for (int y = ys.min; y <= ys.max; y++) {
            printf(pfmt, y);
        }
0
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
31.12.2017, 01:23  [ТС]
Показалось интересным Java функции для работы со строками
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Java функции для работы со строками
 
 
Статические строки
Статические строки реализуются через класс String. Объект строки автоматически создается при использовании строковой литералы. А также для строк доступна операция +, позволяющая соединить несколько строк в одну. Если один из операндов не строка, то он автоматически преобразуется в строку. Для объектов в этих целях используется метод toString().
Некоторые методы объекта String:
compareTo(String anotherString) - лексиграфическое сравнение строк;
compareToIgnoreCase(String str) - лексиграфическое сравнение строк без учета регистра символов;
regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) - тест на идентичность участков строк, можно указать учет регистра символов;
regionMatches(int toffset, String other, int ooffset, int len) - тест на идентичность участков строк;
concat(String str) - возвращает соединение двух строк;
contains(CharSequence s) - проверяет, входит ли указанная последовательность символов в строку;
endsWith(String suffix) - проверяет завершается ли строка указанным суффиксом;
startsWith(String prefix) - проверяет, начинается ли строка с указанного префикса;
startsWith(String prefix, int toffset) - проверяет, начинается ли строка в указанной позиции с указанного префикса;
equals(Object anObject) - проверяет идентична ли строка указанному объекту;
getBytes() - возвращает байтовое представление строки;
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) - возвращает символьное представление участка строки;
hashCode() - хеш код строки;
indexOf(int ch) - поиск первого вхождения символа в строке;
indexOf(int ch, int fromIndex) - поиск первого вхождения символа в строке с указанной позиции;
indexOf(String str) - поиск первого вхождения указанной подстроки;
indexOf(String str, int fromIndex) - поиск первого вхождения указанной подстроки с указанной позиции;
lastIndexOf(int ch) - поиск последнего входения символа;
lastIndexOf(int ch, int fromIndex) - поиск последнего входения символа с указанной позиции;
lastIndexOf(String str) - поиск последнего вхождения строки;
lastIndexOf(String str, int fromIndex) - поиск последнего вхождения строки с указанной позиции;
replace(char oldChar, char newChar) - замена в строке одного символа на другой;
replace(CharSequence target, CharSequence replacement) - замена одной подстроки другой;
substring(int beginIndex, int endIndex) - возвратить подстроку как строку;
toLowerCase() - преобразовать строку в нижний регистр;
toLowerCase(Locale locale) - преобразовать строку в нижний регистр, используя указанную локализацию;
toUpperCase() - преобразовать строку в верхний регистр;
toUpperCase(Locale locale) - преобразовать строку в верхний регистр, используя указанную локализацию;
trim() - отсечь на концах строки пустые символы;
valueOf(a) - статические методы преобразования различных типов в строку.
 
Методы поиска возвращают индекс вхождения или -1 если искомое не найдено. Методы преобразования как replace не изменяют саму строку а возвращают соответствующий новый объект строки.
 
Статические строки также имеют ряд методов использующие регулярные выражения:
matches(String regex) - удовлетворяет ли строка указанному регулярному выражению;
replaceAll(String regex, String rplс) - заменяет все вхождения строк, удовлетворяющих регулярному выражению, указанной строкой;
replaceFirst(String regex, String rplс) - заменяет первое вхождение строки, удовлетворяющей регулярному выражению, указанной строкой;
split(String regex) - разбивает строку на части, границами разбиения являются вхождения строк, удовлетворяющих регулярному выражению;
split(String regex, int limit) - аналогично предыдущему, но с ограничением применения регулярного выражения к строке значением limit. Если limit>0, то и размер возвращаемого массива строк не будет больше limit. Если limit<=0, то регулярное выражение применяется к строке неограниченное число раз.
динамические строки
Если необходимо сделать множество преобразований над строкой, то на это время эффективнее воспользоваться динамической строкой, реализуемой классом StringBuffer.
 
Некоторые методы объекта StringBuffer:
append(A) - преобразовать A в строку и добавить в конец;
insert(int offset, A) - преобразовать A в строку и вставить ее в указанную позицию;
delete(int start, int end) - удалить символы с указанной по указанную позицию;
deleteCharAt(int index) - удалить символ в указанной позиции;
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) - сохранить последовательность символов в массив;
indexOf(String str) - поиск первого вхождения подстроки;
indexOf(String str, int fromIndex) - поиск первого вхождения подстроки с указанной позиции;
lastIndexOf(String str) - поиск последнего вхождения подстроки;
lastIndexOf(String str, int fromIndex) - поиск последнего вхождения подстроки с указанной позиции;
replace(int start, int end, String str) - замена участка строки указанной строкой;
reverse() - расположить символы в обратном порядке;
setCharAt(int index, char ch) - заменить символ в указанной позиции;
setLength(int newLength) - установить новый размер строки;
substring(int start) - вернуть подстроку с указанной позиции и до конца как строку;
substring(int start, int end) - вернуть подстроку как строку.
интерфейс CharSequence
Оба строковых класса реализуют интерфейс CharSequence, т.е. включают в себя методы:
charAt(int index) - символ в указанной позиции;
length() - размер строки;
subSequence(int start, int end) - вернуть подстроку как последовательность символов;
toString() - вернуть строковое представление объекта.
 
Источник: darkraha.com
0
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
04.01.2018, 00:33  [ТС]
Классическая задача на замену местами первого и последнего слова в строке.
С поэтапным поиском решений и ответом
0
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
05.01.2018, 21:26  [ТС]
Карусель (передача информации от класса к классу)
Так действительно можно делать, а если нет, то как лучше?
Java
1
2
3
4
5
6
7
8
9
10
public class W {
    public static void main(String[] args) {
        int i=7;
        int k=-3;
        WMetod1.metod1(i, k);       
    }
    public static void main1 (int Q) {      
        System.out.println(Q);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class WMetod1 {
 
    
 
    public static void metod1(int i, int k) {
        int o=70*i;
        int l=-30*k;
        WMetod2.metod2( o, l);
        
    }
 
}
Java
1
2
3
4
5
6
7
public class WMetod2 {
 
    public static void metod2( int o, int l) {
        int Q =(o)+(l);
        W.main1(Q);
    }
}
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
05.01.2018, 21:34
Можно. Только зачем так изгаляться?
0
 Аватар для Сергей_СПб
28 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 192
05.01.2018, 21:37  [ТС]
iSmokeJC, А как надо...с условием что каждый метод в отдельном классе?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
05.01.2018, 21:43
Как надо... Каждый класс (соответственно его методы) выполняют какие-то конкретные задачи. По кругу-то зачем ходить? Что за условие такое непонятное?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2018, 21:43
Помогаю со студенческими работами здесь

Пример из книги Д. Флэнагана
Здравствуйте, друзья. Помогите пожалуйста разобраться вот в чем: начал знакомиться с JS по книге Д.Флэнагана &quot;JavaScript подробное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru