Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61

Объяснить поведение программы

04.02.2016, 14:58. Показов 1369. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Слабо ответить? Почему в ниже приведенном коде, если после первого вывода в консоль количество литров когда нажимаешь на клавишу N, происходит выход из программы (как и положено согласно коду)? А если пользователь решит снова попробовать узнать сколько в x галлонах будет литров, а затем решит выйти из программы решив нажать клавишу N, то программа выводит в консоль слово "до свиданья", но выхода из программы не происходит. Почему именно так, а не как положено коду?
Вот сам код:
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
import java.util.Scanner;
 
 
public class Main {
    public static void main(String[] args)throws java.io.IOException{
        int gallons;
        double liters = 3.7854;
        Scanner scanner = new Scanner(System.in);
 
 
        System.out.println("Введите количество галлонов, и узнаете сколько будет в литрах");
        gallons = scanner.nextInt();
 
 
        System.out.println("В " + gallons + " галонах  " + gallons * liters + " литров");
 
        System.out.println();
 
        System.out.println("Введите букву D, если хотите начать заново, если не хотите введите N");
 
        while (true) {
            String num = scanner.nextLine();
 
 
            if ("D".equals(num)) {
                System.out.println();
                main(args);
            }
            if ("N".equals(num)) {
                System.out.println("До свиданья");
                break;
 
 
            }
 
 
        }
 
 
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2016, 14:58
Ответы с готовыми решениями:

Объяснить поведение программы
Здравствуйте, дамы и господа! Давайте темам осмысленные имена и задавайте конкретные вопросы. Собственно, сабж: import...

Запись и чтение из бинарного файла, объяснить поведение программы
Добрый день! Подскажите, есть код #include <fstream> #include <iostream> using namespace std; int main() {

Вывести на консоль массив bool (объяснить странное поведение программы)
#include <iostream> int main() { bool q; for (int i=0;i<10;i++) std::cout << q << "\n"; } Всякий раз после компиляции и...

27
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
05.02.2016, 17:01
Студворк — интернет-сервис помощи студентам
Это печально.
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 17:06  [ТС]
Почему?
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
05.02.2016, 17:08
Ну вы не хотите подумать головой. Не можете вписать одну строку.
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 17:12  [ТС]
Очень даже хочу и стараюсь. Но увы пока знаний маловато и я это понимаю и стараюсь как могу исправить недостаток знаний java. Так какую строчку нужно добавить?
0
7 / 7 / 3
Регистрация: 19.08.2015
Сообщений: 76
06.02.2016, 17:22
Цитата Сообщение от Bochkarev Посмотреть сообщение
Atom77, попробуйте убрать рекурсию и поместить в уже имеющийся у вас цикл весь остальной код, начиная с 11 строки.
Намекну ещё толще: переместите while (true) { с 21 строки на 10 и удалите 27 строку - main(args);
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
06.02.2016, 22:30
Bochkarev, просто так строчки двигать туда-сюда не покатит, будет крашится IMHO...

Добавлено через 12 минут
Можно, конечно, вылечить любой код, но вот у меня лично на лечение уходит больше времени, чем на написание заново.
Вот вариант "пролеченной" программки (максимально используя то, что задано):
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Main {
 
    public static void main(String[] args) {
        int gallons;
        String num;
        while (true) {
            System.out.println("Введите количество галлонов, и узнаете сколько будет в литрах");
            gallons = scan().nextInt();
            System.out.printf("В %3d галонах %10.4f литров%n", gallons, (double) (gallons * 3.7854));
            System.out.println("Для продолжения нажмите любую клавишу, выхода нажмите N");
            num = scan().nextLine();
            if (num.equalsIgnoreCase("N")) {
                System.out.println("До свиданья");
                break;
            }
        }
    }
 
    public static Scanner scan() {
        Scanner sc = new Scanner(System.in);
        return sc;
    }
}
0
7 / 7 / 3
Регистрация: 19.08.2015
Сообщений: 76
06.02.2016, 23:35
HOBATOP, я не проверял, вот и решил, что простого расширения цикла хватит. Сейчас посмотрел. Oказывается, там немало косяков. Проверку вводимых символов добавить пришлось.

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
import java.util.Scanner;
 
 
public class Main {
    public static void main(String[] args)throws java.io.IOException{
        int gallons;
        double liters = 3.7854;
        Scanner scanner = new Scanner(System.in);
 
        while (true) {
            System.out.println("Введите количество галлонов, и узнаете сколько будет в литрах");
 
            while (!scanner.hasNextInt()) {
                scanner.nextLine();
            }            
            gallons = scanner.nextInt();
 
            System.out.println("В " + gallons + " галонах  " + gallons * liters + " литров");
 
            System.out.println();
 
            System.out.println("Введите букву D, если хотите начать заново, если не хотите введите N");
 
            String num = scanner.nextLine();
            
 
            while (!num.equals("D") && !num.equals("N")) {
                num = scanner.nextLine();
            }
            if ("D".equals(num)) {
                System.out.println();
            }
            if ("N".equals(num)) {
                System.out.println("До свиданья");
                break;
            }
        }
    }
}
1
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
07.02.2016, 13:58  [ТС]
Всем большое спасибо. Очень важна ваша помощь для самоучки. Особенно важно посмотреть правильный вариант и сравнить его с моим кривым. Благодарю вас добрые и уважаемые люди.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2016, 13:58

Объяснить неожиданное поведение программы при использовании массивов и функции strcpy()
Посмотрел в отладчике,получается,что конструктор берет переменную l,вместо k и записывает ее в sym ,почему? #include <iostream> ...

Объяснить поведение функции
Дароф, немного непонятно действие выполняемое функций: size_t hasher(const Sales_data& sd) { return...

Объяснить поведение рекурсивной функции
Есть код: #include <iostream> using namespace std; void print(int number) { cout << number; if (number < 9) ...

Объяснить нелогичное поведение Select Case
Здравствуйте! Select Case. Как он работает в студии. --------------------------------------- Объясните почему при значении str=100...

Объяснить поведение объекта std::cin в цикле while
#include<iostream> #include<string> #include<cstdlib> #include<windows.h> using namespace std; int main(){ char i; char...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru