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

Почему два if работают не по принципу если, а по поочередно после каждого ввода?

09.02.2016, 11:44. Показов 1514. Ответов 18

Студворк — интернет-сервис помощи студентам
Не могу понять, почему ифы работают поочередно? Если например вводить 3, то в место вывода в консоль ответа целого числа выводиться ответ дробного числа, а при повторном вводе 3, уже выводиться ответ целого числа. (т.е. if работает по очереди)Объясните пожалуйста почему ифы не работают и напишите правильный вариант. Я сам точно не смогу, не понимаю пока как сделать правильно.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
 
public class Gallon3 {
 
    public static void main(String[] args) {
        int km = 1000;
        Scanner scanner = new Scanner(System.in);
        System.out.println("Введите количество километров: \t");
        if (scanner.hasNextDouble()) {//Если набрали дробное число
            double d = scanner.nextDouble();
            System.out.println("В " + d + " километрах " + (d * 1000) + " метров");
        }
        if (scanner.hasNextInt()) {//Если набрали челое число
            int i = scanner.nextInt();
            System.out.println("В " + i + " километрах " + (i * 1000) + " метров");
        }
 
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2016, 11:44
Ответы с готовыми решениями:

Ссылки после ввода логина и пароля не работают
Не могу понять в чем ошибка и почему ссылки после ввода логина и пароля не работают(( вот код <title>ОКНО ПРОВЕРКИ</title> ...

Не могу понять почему в навигации два пункта не работают
Почему при наведении.....не хочет работать pointer.... может подскажет кто???? <!DOCTYPE html> <html lang="ru"> ...

Удалить из каждого списка два элемента после каждого элемента с нечетным значением и подсчитать количество удаленных
Вот честно не пойму как это сделать буду очень благодарен если кто-то поможет

18
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
09.02.2016, 12:09
Используй else if
0
8 / 8 / 4
Регистрация: 07.02.2016
Сообщений: 26
09.02.2016, 12:12
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Gallon3 {
 
    public static void main(String[] args) {
        int km = 1000;
        Scanner scanner = new Scanner(System.in);
        System.out.println("Введите количество километров: \t");
        if (scanner.hasNextInt()) {//Если набрали целое число
            int i = scanner.nextInt();
            System.out.println("В " + i + " километрах " + (i * 1000) + " метров");
        }
        else if (scanner.hasNextDouble()) {//Если набрали дробное число
            double d = scanner.nextDouble();
            System.out.println("В " + d + " километрах " + (d * 1000) + " метров");
        }
    }
}
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
09.02.2016, 12:15  [ТС]
Здравствуйте Doctor. Помню, что вы скупы на ответ, но понимаешь? Я блин и else и while и true пробывал использовать. Но у меня не получается. Не понимаю я почему то, я в следующий раз напишу для вас доктор отдельное пояснение.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
09.02.2016, 12:16
проверка scanner.hasNextDouble() стоит первая, поэтому все числа будут попадать под это условие
я бы поставил проверку на nextInt на первое место

выше уже парень отписал правильный код
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
09.02.2016, 12:19  [ТС]
Привет Паблито. Ставил я и в первую очередь в вторую все равно идет в порядке очередности, щас проверю как Maximkaa предложил, вот именно так я еще не ставил.
0
8 / 8 / 4
Регистрация: 07.02.2016
Сообщений: 26
09.02.2016, 12:22
Atom77, Паблито все так написал + else if
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
09.02.2016, 12:23  [ТС]
Не правильно Maximkaa показал.

вот что выводит, если целое число ввел 3:
3
В 3.0 километрах 3000.0 метров

Process finished with exit code 0
0
8 / 8 / 4
Регистрация: 07.02.2016
Сообщений: 26
09.02.2016, 12:30
Atom77, видимо else перед вторым if забыли посмотрите еще раз внимательно
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
09.02.2016, 12:36  [ТС]
О, я бамбук! Точно, Maximkaa и Паблито правы. Я поменял в начале поставил scanner.hasNextInt() и все заработало. Если ввести целое число, то вывод целых чисел, а если дробное, то ответ уже в дробном виде. Но объясните, почему нельзя менять hasNextInt() и hasNextDouble() местами. Потому что Double() имеет приоритет перед NextInt() ???

Добавлено через 5 минут
Я правильно понимаю, что int может расшириться до double, double не расширяется до int ??? Мне важно, объясните пожалуйста.
0
8 / 8 / 4
Регистрация: 07.02.2016
Сообщений: 26
09.02.2016, 12:49
Atom77, переменная типа int имеет размер 32 бита, а переменная типа double 64 бита. Поэтому правильно что int расширяется в double но не наоборот.
По поводу проверок hashNext... не уверен что могу правильно сформулировать поэтому прошу помощи зала))
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
09.02.2016, 12:55  [ТС]
Maximkaa, спасибо большое за ответ. Точно, я же знал об этом, почему сам не догадался. У меня же пямятка весит на стене в 20 сантиметрах от компа, про типы переменных с пояснениями. Еще раз спасибо. Будем ждать пояснения про проверки hasNextDouble() и hasNextInt().
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
09.02.2016, 12:59
цифра ТРИ (на самом деле еще не цифра, а символ или несколько символов) может быть "следующим числом с типом double" ?

ну а почему бы и нет, потому она и проходит проверку на nextDouble
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
09.02.2016, 13:11  [ТС]
Ну ведь при проверке nextDouble проверка и должна же определить, что цифра 3 являеться целым числом, а не дробным. Но в итоге, если поставить nextDouble перед nexInt, то nextDouble присваевает целое число себе, хотя целое число и есть целое, а не дробное. Почему так происходит?
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
09.02.2016, 13:15
Atom77, вот как-то так можно:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Gallon3 {
 
    public static void main(String[] args) {
        int km = 1000;
        Scanner scanner = new Scanner(System.in);
        System.out.println("Введите количество километров: \t");
        String sNum = scanner.next();
        if (sNum.contains(".")) {//Если набрали дробное число
            double d = Double.parseDouble(sNum);
            System.out.println("В " + d + " километрах " + (d * 1000) + " метров");
        } else {
           //Если набрали челое число
            int i = Integer.parseInt(sNum);
            System.out.println("В " + i + " километрах " + (i * 1000) + " метров");
        }
    }
}
0
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
09.02.2016, 13:19  [ТС]
Спасибо Наватор, с этим мы разобрались. Объясните пожалуйста почему при проверке nextDouble проверка и должна же определить, что цифра 3 является целым числом, а не дробным. Но в итоге, если поставить nextDouble перед nexInt, то nextDouble присваивает целое число себе, хотя целое число и есть целое, а не дробное. Почему так происходит?
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
09.02.2016, 14:42
Лучший ответ Сообщение было отмечено Atom77 как решение

Решение

Atom77, а Вы себе вот такой классик сварганьте, и попробуйте интерпретировать результаты его работы:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class IntDouble {
 
    public static void main(String[] args) {
        String str = "Start 3.6 9 55.9 todo 458.996 2 5 finish";
        Scanner si = new Scanner(str);
        while (si.hasNext()) {
            System.out.print("" + si.hasNextInt());
            System.out.println(" " + si.next());
        }
        System.out.println("-----------------------------");
        Scanner sd = new Scanner(str);
        while (sd.hasNext()) {
            System.out.print("" + sd.next());
            System.out.println(" " + sd.hasNextDouble());
        }
    }
}
int ни разу себе чужого не притянул, а вот double - да... Мне сложно объяснить почему некоторые числа с дробной частью не определяются как double, а некоторые без дробной части воспринимаются как дробные... Может корифеи снизойдут...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
false Start
false 3.6
true 9
false 55.9
false todo
false 458.996
true 2
true 5
false finish
-----------------------------
Start false
3.6 true
9 false
55.9 false
todo false
458.996 true
2 true
5 false
finish false
1
 Аватар для Atom77
1 / 1 / 0
Регистрация: 25.01.2016
Сообщений: 61
09.02.2016, 14:52  [ТС]
Спасибо HOBATOP, очень наглядно и понятно. Буду иметь ввиду с поведением double. Все тема закрыта, всем спасибо, HOBATOP опять на высоте.
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
09.02.2016, 15:00
Atom77,
Цитата Сообщение от Atom77 Посмотреть сообщение
Буду иметь ввиду с поведением double
я так вообще думаю, что это не очень хорошая затея использовать hashNextDouble в такой позиции. Мне думается то решение, которое я набросал, будет более верно. Можно на него накрутить try-catch - чтобы совсем огородиться от символов - не цифр, перевод строки в нижний регистр, реагирование на наличие экспоненты - но мы же не ваяем крутизну, а делаем рабочий пример, не более того.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2016, 15:00
Помогаю со студенческими работами здесь

Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела.
Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела. Как сделать так, чтоб между точкой и...

По какому принципу работают переводчики
я решил написать переводчик(не используя сторонние API(да работы будет много)) пока что с русского на английский. так вот у меня...

После каждого четного элемента массива вставить два элемента с тем же значением, после чего полученный массив отсортировать по убыванию
Ребят, помогите с задачкой новичку. После каждого четного элемента массива вставить два элемента с тем же значением, после чего...

Почему не отображаются данные после ввода
Здравствуйте В Матлаб такая ошибка. Данные трехмерные. Cannot display summaries of variables with more than 524288 elements. У...

После каждого символов '.' вставить два пробела
После каждого символов '.' вставить два пробела, подсчитать, сколько раз пара символов 'C+' стоит перед символом 'D'. Требуется...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru