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

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

04.02.2016, 14:58. Показов 1172. Ответов 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
7 / 7 / 3
Регистрация: 19.08.2015
Сообщений: 76
04.02.2016, 15:17
Цитата Сообщение от Atom77 Посмотреть сообщение
Почему именно так, а не как положено коду?
На мой взгляд, всё работает именно так, как положено по коду, вы ж рекурсию использовали. Из цикла запустили мейн, в котором снова запустили цикл. Вам нужно будет уже из обоих циклов выйти, чтобы программа завершила работу, то есть два раза N ввести.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
04.02.2016, 15:29
Atom77, заголовки тем а-ля желтая пресса оставьте для других мест. В след. раз буду выдавать карту.

Программа работает так потому что вы её криво написали. Рекурсивный вызов тут вообще не в тему.
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
04.02.2016, 16:05
Вы понимаете ту деталь, что при вводе D, у вас цикл продолжает крутиться и создаётся новый. То есть у вас уже два цикла. По этому надо два раза ввести N.
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 11:11  [ТС]
Спасибо вам всем, что ответили. Конечно я согласен, что рекурсив здесь не к месту. Пробуя рекурсив в других прогах у меня постоянно последняя надпись выходила 2 раза. Пожалуйста напишите, что было бы правильно написать в место рекурсива.
0
7 / 7 / 3
Регистрация: 19.08.2015
Сообщений: 76
05.02.2016, 11:25
Atom77, попробуйте убрать рекурсию и поместить в уже имеющийся у вас цикл весь остальной код, начиная с 11 строки.
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 13:19  [ТС]
Я пробывал так и раньше, но для вас показываю, что в выводит консоль. Как всем надеюсь видно, без нажатия кнопки D или N прога переходит в начало, это не то что нужно.
Ну, кто нибудь напишет правильный вариант?

"C:\Program Files\Java\jdk1.8.0_65\bin\java"
Введите количество галлонов, и узнаете сколько будет в литрах
3
В 3 галлонах 11.356200000000001 литров

Введите букву D, если хотите начать заново, если не хотите введите N
Введите количество галлонов, и узнаете сколько будет в литрах
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
05.02.2016, 14:40
Atom77,
Цитата Сообщение от Atom77 Посмотреть сообщение
кто нибудь напишет правильный вариант?
что значит правильный? Работающий или оформленный по каким-то строгим канонам? Если угодно вот Вам вариант работающего кода:
Кликните здесь для просмотра всего текста
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
class Gallons {
 
    public static double gallonToLiter(double n) {
        return n * 3.7854;
    }
 
    public static double vvod() {
        Scanner sc = new Scanner(System.in);
        return sc.nextDouble();
    }
 
    public static String key() {
        Scanner sc = new Scanner(System.in);
        return sc.nextLine();
    }
 
    public static void exit() {
        System.out.println("Вы вышли из программы.");
    }
 
    public static void logic() {
        double gallon;
        System.out.print("Введите количество галлонов: ");
        gallon = vvod();
        System.out.printf("%12.4f галлонов вмещают %12.4f литров%n", gallon, gallonToLiter(gallon));
        System.out.println("Для продолжения нажмите w для выхода нажмите q");
        String move = key();
        if (move.equals("w")) {
            logic();
        } else {
            if (move.equals("q")) {
                exit();
            }
        }
    }
 
    public static void main(String[] args) {
        logic();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
Введите количество галлонов: 9,5
      9,5000 галлонов вмещают      35,9613 литров
Для продолжения нажмите w для выхода нажмите q
w
Введите количество галлонов: 22,58
     22,5800 галлонов вмещают      85,4743 литров
Для продолжения нажмите w для выхода нажмите q
w
Введите количество галлонов: 125,741
    125,7410 галлонов вмещают     475,9800 литров
Для продолжения нажмите w для выхода нажмите q
q
Вы вышли из программы.

Текст и символы для продолжения и выхода сами уже подправляйте под то, что требуется. Ok?
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 14:48  [ТС]
Спасибо Новатор. Все работает, благодарю. Я правильно понимаю, что вы показали в объектно ориентированом стиле?
Ведь по сути классы можно раскидать по отдельным файлам. А у вас все в одном, чтоб не выкладывать много файлов(т.е. классов)? Еще раз спасибо, есть среди спецов и хорошие люди.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
05.02.2016, 15:24
Atom77, это один класс и в нём его методы. Разносить такого рода задачу на несколько классов можно конечно, но ни к чему. А вот наследоваться от него [данного класса] можно.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.02.2016, 15:28
Цитата Сообщение от Atom77 Посмотреть сообщение
что вы показали в объектно ориентированом стиле?
этот стиль называется масло-масляное
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 15:49  [ТС]
Паблито, ты такой умник в "". Что же ты Паблито не решил данную задачку как это сделал Новатор ? Или ума не хватает, как у меня? Ну если хватает, то выложите пожалуйста свой вариант.
0
05.02.2016, 15:52

Не по теме:

я решаю задачи, которые интересны в первую очередь мне
ну или если человек нормально и культурно ставит задачу, а не так как у тебя она была поставлена до того как ее отредактировали

0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 15:57  [ТС]
Свои вопросы редактировал я сам. Исправлял смысл вопроса. Ну вам не интересно показать другим, что вы реально можете? Зато как мы все наблюдаем, вам интересно критиковать других. Ну из этого выходит вывод или вы не можете или вы реально не можете и вам нечего показывать.
0
05.02.2016, 16:02

Не по теме:

я люблю критиковать других, ничего не могу и мне нечего показать
а еще меня бесполезно вот так, в тупую, брать "на слабо" :D

0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 16:06  [ТС]
Да никого я не брал ни на что. И ругаться не хочу. Извините если огорчил вас. Подожду другие варианты от других, но
чувствую, что других вариантов не будет.
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
05.02.2016, 16:22
Я скажу так. В ваш код надо добавить одну строку, чтобы он заработал как вы хотите.
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 16:24  [ТС]
Очень интересно. Как раз читал ваши посты и тут вы доктор появились. Прикольно. Я вас жду, только без приколов пож.
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
05.02.2016, 16:53
Ну я же вам не скажу какую строку и куда. Вы правда не понимаете? Я в предыдущем своём ответе сказал что не так у вас.
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
05.02.2016, 16:59  [ТС]
Из всех ответивших говорю еще раз спасибо пока только Новатору. Только он без всяких намеков и лишних действий дал четкий конкретный ответ. Жду какие либо другие варианты ответов .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.02.2016, 16:59
Помогаю со студенческими работами здесь

Объяснить неожиданное поведение программы при использовании массивов и функции 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...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru