31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
1

Аргументы консоли, переменные внутри цикла, имена методов и объектов

24.07.2016, 10:37. Показов 1775. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В продолжение к теме Первая программа на Java
FatNinja, HOBATOP, изучил ваши примеры, разобрался в них.
Написал программку для решения задания к главе 1, вариант А по книге Блинов, Романчик - Java. Методы программирования. Список заданий прикреплю. Выкладываю вам на суд. Знаю, что в интернете есть готовые решения, но я их не смотрел, так как хочу разобраться сам. Поэтому прошу советов и сильно не пинать Вдогонку несколько вопросов:
1) Можно увидеть, что у меня есть совпадения в названиях методов и объектов. Насколько это критично? Просто называл по логике.
2) Не смог создать отдельный метод, работающий с аргументами консоли. Так как args из метода main в другом методе недоступен. Что нибудь подскажете?
3) Для переменных внутри цикла (к примеру i в цикле for) тоже обязательно придумывать осмысленные названия?
Кликните здесь для просмотра всего текста
1.Приветствовать любого пользователя при вводе его имени через командную строку.
2.Отобразить в окне консоли аргументы командной строки в обратном порядке.
3.Вывести заданное количество случайных чисел с переходом и без перехода на новую строку.
4.Ввести пароль из командной строки и сравнить его со строкой-образцом.
5.Ввести целые числа как аргументы командной строки, подсчитать их суммы (произведения) и вывести результат на консоль.
6.Вывести фамилию разработчика, дату и время получения задания, а так же дату и время сдачи задания.

Кликните здесь для просмотра всего текста
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
97
98
99
100
101
102
103
104
105
106
107
108
109
/** Это программа решения задания к главе 1, вариант А
  * по книге Блинов, Романчик - Java. Методы программирования.
  * @author striker24
  */
  
import java.util.Scanner;
import java.util.Random;
import java.util.Date;
  
public class Chapter1VarA {
        
    public static void main (String[] args) {
        
        
        Scanner scan = new Scanner(System.in);
        String name = name(scan, "Enter your name: "); //приветствие пользователя
        System.out.println("Greetings, " + name);
        System.out.print("Arguments in reverse order: "); //аргументы консоли в обратном порядке
        for (int i = args.length - 1; i >= 0; i--) {
        System.out.print(args[i] + "; ");
        }
        int[] rndNumbers = randomNumbers(scan); // случайные числа с переводом и без перевода на следующую строку
        System.out.println("Random numbers with Ln: ");
        for (int i : rndNumbers) {
            System.out.println(i + ";");
        }
        System.out.print("Random numbers withoutLn: ");
        for (int i : rndNumbers) {
            System.out.print(i + "; ");
        }
        String checkPassword = checkPassword(scan, "\nInsert the password: "); // проверка пароля
        System.out.println(checkPassword);
        int sum = 0, product = 1; // сумма и произведение аргументов консоли
        for (int i = 0; i < args.length; i++) {
            sum += Integer.parseInt(args[i]);
            product *= Integer.parseInt(args[i]);
        }
        System.out.println("The sum of arguments: " + sum + "\nThe product of arguments: " + product);
        String developerDateTime = developerDateTime(scan, "Insert your surname: "); //вывод фамилии разработчика и времени сдачи проекта
        System.out.println(developerDateTime);
        
    }
    
    /** 
     * Метод запроса имени пользователя
     */
        
    private static String name(Scanner scan, String label) {
        
        System.out.println(label);
        String str = scan.nextLine();
        return str;
        
    }
        
    /** 
     * Метод запроса количества случайных чисел
     * и составляющий из них массив.
     */
     
    private static int[] randomNumbers(Scanner scan) {
        
        Random rnd = new Random();
        System.out.println("\nVedite kolvo: ");
        int quantity = scan.nextInt();
        int[] rndNumbers = new int[quantity];
        for (int i = 0; i < quantity; i++) {
            rndNumbers[i] = rnd.nextInt();
        }
        return rndNumbers;
    
    }
    
    /**
     * Метод проверки корректности ввода пароля.
     * Пароль по умолчанию "Password".
     */
    
    private static String checkPassword(Scanner scan, String label) {
        
        System.out.println(label);
        String check = "";
        String password = scan.next();
        if (password.equals("Password")) {
            check = "Correct. Access granted.";
        } else {
            check = "Wrong. Access denied.";
        }
        return check;
        
    }
    
    /**
     * Метод запроса фамилии разработчика.
     * Время сдачи проекта принимается равным 
     * текущему системному времени.
     */
    
    private static String developerDateTime(Scanner scan, String label) {
        
        System.out.println(label);
        String developer = scan.next();
        Date date = new Date();
        String developerDateTime = "This programm is writed by developer with surname: " + developer + ".\nThe date of finish: " + date.toString() + ".";
        return developerDateTime;
        
    }
        
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2016, 10:37
Ответы с готовыми решениями:

Использование анонимных методов внутри цикла foreach
Добрый день, у меня возникла любопытная ситуация, поведение которой я не знаю как объяснить. В...

"Динамичные" переменные внутри цикла
В форе надо записать значение переменной имя которой формуется из значения другой переменной внутри...

Внутриблочные переменные не могут иметь те же имена, что и переменные из блока верхнего уровня
program matr; uses crt; const n = 5; m = 5; var

Аргументы в консоли
Здравствуйте, хочу что бы при передачи аргументов в командную строку выполнялось какое либо...

13
Автоматизируй это!
Эксперт Python
7062 / 4566 / 1210
Регистрация: 30.03.2015
Сообщений: 13,157
Записей в блоге: 29
24.07.2016, 11:40 2
1) для методов пожалуй не критично, если действительно описывает его функционал, классы лучше называть по разному как и объекты чтобы просто не путать.
2) ну так передай этот аргс (массив стринг) в другой метод и там используй
3) внутри цикла for оставляй i больше то она нигде не нужна и живет только там

Если уж пишешь на латинице то используй английский язык, а то от Vvedite kolvo рука тянется к кобуре
Важно - статик это плохо, избавляйся от них. Кроме того, не пытайся очень много засунуть в мейн, лучше разделить на методы.
1
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
24.07.2016, 15:22  [ТС] 3
Welemir1, 2) Не исключаю того, что я туплю, т.к. я этот код писал уже полусонный и уставший (трудно время на кодинг найти с моей работой). Когда передавал args в другой метод (а именно args.length), то ловил ошибку компиляции - не помню точно какую. Пробовал создавать public переменную, равную args.length, и передавать её в другой метод - опять ошибка.
По поводу Vvedite kolvo согласен, не углядел Тестил метод и на скорую написал так, а потом забыл исправить.
По поводу static. Я думал, что их по идее убрать можно. Объект есть, к которому они применяются, поэтому по идее они не нужны. А чем это плохо?
Я разбил на методы по заданиям. Имеешь ввиду, что лучше бы еще было разбить на методы однотипные действия в main()?
0
Автоматизируй это!
Эксперт Python
7062 / 4566 / 1210
Регистрация: 30.03.2015
Сообщений: 13,157
Записей в блоге: 29
24.07.2016, 19:19 4
striker24, возможно как то не так передавал, у тебя должен быть метод, принимающий на вход массив стрингов, туда передай и там сделай все что хотел.
Цитата Сообщение от striker24 Посмотреть сообщение
Объект есть, к которому они применяются, поэтому по идее они не нужны. А чем это плохо?
Все верно, а плохо тем, что статики это переменные и методы зашитые намертво, ты не сможешь их переопределить или перегрузить при наследовании или полиморфизме, то есть это уже не ООП, а пережиток процедурного программирования. Если есть возможность -обходись без них.
По поводу методов -дело твое, ты же создатель) Но я предпочитаю чтобы в мейне было всего пара-тройка строк, дальше уже все делают объекты. Это опять же привычка процедурного программирования -пихать все в один метод.
Но в целом код у тебя неплохой, тут гораздо более страшные вижу, двигайся в том же направлении.
Еще один момент -
Цитата Сообщение от striker24 Посмотреть сообщение
String developerDateTime = developerDateTime
при чтении сбивает с толку так как имя вроде одно а на самом деле это метод и переменная. Лучше называть методы глаголами исходя из того что он делает, а не существительными, например getDeveloperSurnameAndTime()
1
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
24.07.2016, 19:59  [ТС] 5
Welemir1,
Цитата Сообщение от Welemir1 Посмотреть сообщение
ты не сможешь их переопределить или перегрузить при наследовании или полиморфизме, то есть это уже не ООП, а пережиток процедурного программирования
Вот это пока не слишком понял, хотя знаю про наследование и полиморфизм. Наверное думаю все еще по принципу процедурно-орентированного программирования. Надеюсь со временем пройдет.
Цитата Сообщение от Welemir1 Посмотреть сообщение
Лучше называть методы глаголами
Вот оно, спасибо. Именно про это я говорил в первом сообщении.
Попробую сегодня передать в метод Strings[] args. Думаю так должно пойти. Сегодня начал использовать ArrayList. Возможно ли такие массивы передавать на вход метода?.
0
Автоматизируй это!
Эксперт Python
7062 / 4566 / 1210
Регистрация: 30.03.2015
Сообщений: 13,157
Записей в блоге: 29
24.07.2016, 20:09 6
да, можно это же объект, а это ООП тут все на них работает. Правда аррай лист не массив.
1
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
24.07.2016, 21:39 7
striker24,
Цитата Сообщение от striker24 Посмотреть сообщение
Не смог создать отдельный метод, работающий с аргументами консоли. Так как args из метода main в другом методе недоступен. Что нибудь подскажете
при работе приложения в командной строке параметры передаются оттуда, при разработке в какой-либо среде программирования предусмотрена возможность передачи аргументов в метод main. Например в IntelliJ IDEA передать параметр можно выполнив:
Run -> Edit Configurations... -> Program аrguments
Там Вы вводите всё, что нужно передать в качестве аргументов. В других программах путь к вводу несколько иной, но где искать уже должно быть понятно.
1
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
24.07.2016, 23:26  [ТС] 8
HOBATOP, Welemir1, насколько опасно использовать методы, невозвращающие ничего (void)? Пишу программку по выводу списка из четных и нечетных чисел массива. Не стал заморачиваться и сделал метод void, внутри которого происходит вывод System.out.print. То есть, помимо самого main(), у меня присутствует еще один метод void.
0
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
24.07.2016, 23:49 9
striker24,
Цитата Сообщение от striker24 Посмотреть сообщение
насколько опасно использовать методы
- они же не взрываются...
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
class NothingBack{
    static StringBuilder sb = new StringBuilder();
 
    public void addName(){
        System.out.print("Напишите имя: ");
        sb.append(new Scanner(System.in).nextLine()).append(" ");
    }
    public void addSurname(){
        System.out.print("Напишите фамилию: ");
        sb.append(new Scanner(System.in).nextLine());
    }
    public void addPatronymic(){
        System.out.print("Напишите отчество: ");
        sb.append(new Scanner(System.in).nextLine()).append(" ");
    }
 
    public static void main(String[] args) {
        NothingBack nothingBack = new NothingBack();
        nothingBack.addName();
        nothingBack.addPatronymic();
        nothingBack.addSurname();
        System.out.println(sb.toString());
    }
}
Ни один метод ни чего не возвращает и что? Нужно смотреть по ситуации, по логике программы когда возвращать что-то, когда можно не делать этого... Что в метод попадает, что внутри происходит, как потом это протестировать - много нюансов.
1
31 / 31 / 12
Регистрация: 25.07.2015
Сообщений: 120
24.07.2016, 23:58  [ТС] 10
HOBATOP,

Не по теме:

спасибо. У меня сейчас так и получается, что легче создать 5 методов void. Не хочу привыкнуть к чему-то неправильному и потом переучиваться.
От static пока не получается уйти.

0
HOBATOP
25.07.2016, 00:06
  #11

Не по теме:

striker24,

Цитата Сообщение от striker24 Посмотреть сообщение
От static пока не получается уйти
- ни чего страшного, разберётесь с модификаторами вникнете в смысл возвращения данных из метода и всё утрясётся...

0
Автоматизируй это!
Эксперт Python
7062 / 4566 / 1210
Регистрация: 30.03.2015
Сообщений: 13,157
Записей в блоге: 29
25.07.2016, 19:06 12
присоединяюсь, не все сразу, будешь регулярно кодить и все само придет, поймешь. Не бойся экспериментировать, читай литературу и ни дня без строки кода)
1
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
25.07.2016, 22:41 13
Цитата Сообщение от HOBATOP Посмотреть сообщение
Ни один метод ни чего не возвращает и что?
Вынеси main в отдельный класс в другом пакете, сразу поймёшь.
0
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
25.07.2016, 23:05 14
aleksandy, уважаемый Вы ТС'у что-то можете посоветовать, привести пример какой-нибудь, пояснить что вот это гу-у-у-д, а вот это ай-яй-яй? Вот какой смысл дискутировать со мной? Да, я сознательно нарушаю в подобных примерах какие-то "незыблемые" правила только лишь для того, чтобы показать, что то или иное действие возможно (или же невозможно). На Вашу реплику могу ответить следующее: всё под спойлером. Вы просили main в другом классе и в другом пакете - извольте, только не говорите, что я опять что-то нарушил или не так сделал. Ok?
Кликните здесь для просмотра всего текста
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
package com.home;
 
import java.util.Scanner;
 
public class NothingBack{
    public static StringBuilder sb = new StringBuilder();
 
    public void addName(){
        System.out.print("Напишите имя: ");
        sb.append(new Scanner(System.in).nextLine()).append(" ");
    }
    public void addSurname(){
        System.out.print("Напишите фамилию: ");
        sb.append(new Scanner(System.in).nextLine());
    }
    public void addPatronymic(){
        System.out.print("Напишите отчество: ");
        sb.append(new Scanner(System.in).nextLine()).append(" ");
    }
 
    public static void main(String[] args) {
        NothingBack nothingBack = new NothingBack();
        nothingBack.addName();
        nothingBack.addPatronymic();
        nothingBack.addSurname();
        System.out.println(sb.toString());
    }
}
 
package com.home.work;
 
import com.home.NothingBack;
 
public class TwoNothingBack extends NothingBack {
    public static void main(String[] args) {
        TwoNothingBack tnb = new TwoNothingBack();
        tnb.addName();
        tnb.addPatronymic();
        tnb.addSurname();
        System.out.println(sb.toString());
    }
}

Всего наилучшего!
0
25.07.2016, 23:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2016, 23:05
Помогаю со студенческими работами здесь

Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только создание объектов и вызов методов
Всем привет) помогите пожалуйста с заданием &quot;Реализовать ввод исходных данных, расчет и вывод...

Имена входных и выходных файлов задаются через аргументы командной строки
Как программе передать аргументы через командную строку? Приложение консольное. Насколько я...

Переменные аргументы: файл stdarg.h
Есть следующий код: #include &lt;stdio.h&gt; #include &lt;stdarg.h&gt; double sum(int n, ...) {...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в цикле while в строке x:=x div 10; выдает ошибку &quot;Нельзя изменять значение переменной...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru