Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для Удутф
19 / 1 / 2
Регистрация: 25.06.2014
Сообщений: 90

Тот же код - разный результат

01.11.2015, 03:14. Показов 760. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Форумчане! Чем объяснить разницу в аутпуте: две while - одна copy pasted с другой - но в одной - при подсчете миль - нужно добавить 1 чтобы нейтрализовать -1 sentinel, а в другой - для галлонов- не нужно?

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
package deitel.ch_4;
 
import java.util.Scanner;
 
public class GasMileage {
 
    public static void main(String[] args) {
        
        @SuppressWarnings("resource")
        Scanner input = new Scanner(System.in);         
        
        int miles = 0;
        int gallons = 0;
        double mpg = 0;
        int totalMiles = 0;
        int totalGallons = 0;
        int entryCounterM = 0;
        int entryCounterG = 0;
        
            while (miles != -1) {
                
                System.out.println("Enter the number of miles or -1 to quit: ");
                miles = input.nextInt();
                
                    entryCounterM++;
                        
                    totalMiles += miles ;   
                                
            }           
            
                System.out.printf("Total miles is %d%n%n", totalMiles +1);
            
                totalMiles = totalMiles +1;         
            
            
            while (gallons != -1) {
                
                System.out.println("Enter the number of gallons or -1 to quit: ");
                gallons = input.nextInt();  
                
                entryCounterG++;
                
                totalGallons += gallons;
                
                if (entryCounterG == (entryCounterM -1)) {
                    
                    System.out.println("This was the last gallon entry, enter -1 to quit"); 
                    gallons = input.nextInt();
                }
            }
            
            
                System.out.printf("Total gallons is %d%n%n", totalGallons);
                
                //totalGallons = totalGallons +1;
                
                mpg = (double)totalMiles / totalGallons;
                
                System.out.printf("Mpg is : %.2f%n", mpg);
            
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2015, 03:14
Ответы с готовыми решениями:

Один и тот же код с одинаковыми параметрами выдает разный результат
Добрый вечер. Уже не понимаю что PHP хочет. Ситуация такая: есть форма добавления некоторых данных в БД, а так же test.php для проверки...

Один и тот же файл иконки - разный результат
Вообще непонятная система. Изначально хотел задать этот вопрос в разделе программирования, но понял, что это и без программирования...

с хабра и мой код дают разный результат. why
здравствуйте, ради обучения решил сделать проверку во время компиляции на наличие в классе функции, возвращающей void и принимающей int......

9
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
01.11.2015, 11:16
Java
1
2
3
4
5
if (entryCounterG == (entryCounterM -1)) {
                    
                    System.out.println("This was the last gallon entry, enter -1 to quit"); 
                    gallons = input.nextInt();
                }
Цитата Сообщение от Удутф Посмотреть сообщение
одна copy pasted с другой
0
 Аватар для Удутф
19 / 1 / 2
Регистрация: 25.06.2014
Сообщений: 90
01.11.2015, 12:38  [ТС]
Ну да, так ведь это в ифе а не в вайле, while -то один и тот же, if закрыт фиг скобками, а вот эта штуковина вообще вне цикла
Java
1
2
3
                System.out.printf("Total miles is %d%n%n", totalMiles +1);
            
                totalMiles = totalMiles +1;
как и эта
Java
1
2
3
4
             System.out.printf("Total gallons is %d%n%n", totalGallons);
                
                        
                mpg = (double)totalMiles / totalGallons;
Только к miles надо 1 прибавлять чтобы работало, как будто подгоняем под результат. так что все равно непонятно почему разница
0
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
01.11.2015, 13:33
тут прибавляется "-1" к общему количеству миль после последней итерации цикла.
Java
1
2
3
4
5
6
7
8
9
10
while (miles != -1) {
                
                System.out.println("Enter the number of miles or -1 to quit: ");
                miles = input.nextInt();
                
                    entryCounterM++;
                        
                    totalMiles += miles ;   
                                
            }
а этот if не дает прибавить "-1" к кол-ву галлонов.
Java
1
2
3
4
5
if (entryCounterG == (entryCounterM -1)) {
                    
                    System.out.println("This was the last gallon entry, enter -1 to quit"); 
                    gallons = input.nextInt();
                }
0
 Аватар для Удутф
19 / 1 / 2
Регистрация: 25.06.2014
Сообщений: 90
01.11.2015, 19:33  [ТС]
Вот это-то меня и удивляет - если не добавлять 1 к милям - output получается 199 т.е. на единицу меньше
Java
1
2
3
4
5
6
7
8
9
10
11
12
            while (miles != -1) {
                
                System.out.println("Enter the number of miles or -1 to quit: ");
                miles = input.nextInt();
                
                    entryCounterM++;
                        
                    totalMiles += miles ;   
                                
            }           
            
                System.out.printf("Total miles is %d%n%n", totalMiles);
Enter the number of miles or -1 to quit:
100
Enter the number of miles or -1 to quit:
100
Enter the number of miles or -1 to quit:
-1
Total miles is 199

Те нужна коррекция, добавляем 1
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            while (miles != -1) {
                
                System.out.println("Enter the number of miles or -1 to quit: ");
                miles = input.nextInt();
                
                    entryCounterM++;
                        
                    totalMiles += miles ;   
                                
            }           
            
                System.out.printf("Total miles is %d%n%n", totalMiles +1);
            
                totalMiles = totalMiles+1;
Получаем нужные 200

Enter the number of miles or -1 to quit:
100
Enter the number of miles or -1 to quit:
100
Enter the number of miles or -1 to quit:
-1
Total miles is 200


А галлонам такой коррекции не требуется

Enter the number of gallons or -1 to quit:
10
Enter the number of gallons or -1 to quit:
10
This was the last gallon entry, enter -1 to quit
-1
Total gallons is 20

А почему???????
0
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
01.11.2015, 19:36
Удутф, попробуйте разобрать код на листе бумаги, проделывая все действия.
0
 Аватар для Удутф
19 / 1 / 2
Регистрация: 25.06.2014
Сообщений: 90
01.11.2015, 20:39  [ТС]
Попробовала -
0
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
01.11.2015, 20:53
Java
1
2
3
4
5
6
7
8
9
10
while (miles != -1) {
                
                System.out.println("Enter the number of miles or -1 to quit: ");
                miles = input.nextInt();
                
                    entryCounterM++;
                        
                    totalMiles += miles ;   
                                
            }
Enter the number of miles or -1 to quit:
100
//entryCounterM = 1; totalMiles = 100;
Enter the number of miles or -1 to quit:
100
//entryCounterM = 2; totalMiles = 200;
Enter the number of miles or -1 to quit:
-1
//entryCounterM = 3; totalMiles = 199;

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while (gallons != -1) {
                
                System.out.println("Enter the number of gallons or -1 to quit: ");
                gallons = input.nextInt();  
                
                entryCounterG++;
                
                totalGallons += gallons;
                
                if (entryCounterG == (entryCounterM -1)) {
                    
                    System.out.println("This was the last gallon entry, enter -1 to quit"); 
                    gallons = input.nextInt();
                }
            }
Enter the number of gallons or -1 to quit:
10
//entryCounterG = 1; totalGallons = 10;
потом проверяется
Java
1
2
3
4
5
if (entryCounterG == (entryCounterM -1)) { // 1 == 2 ?
                    
                    System.out.println("This was the last gallon entry, enter -1 to quit"); 
                    gallons = input.nextInt();
                }
Enter the number of gallons or -1 to quit:
10
//entryCounterG = 2; totalGallons = 20;
потом проверяется
Java
1
2
3
4
5
if (entryCounterG == (entryCounterM -1)) { // 2 == 2 ?
                    
                    System.out.println("This was the last gallon entry, enter -1 to quit"); 
                    gallons = input.nextInt(); // тут вводите -1 и дальше цикл не пойдет, так как нарушается условие
                }
1
 Аватар для Удутф
19 / 1 / 2
Регистрация: 25.06.2014
Сообщений: 90
01.11.2015, 23:19  [ТС]
Я вот что не понимаю - когда ввожу мили - минус один уменьшает количетсво миль до 199 (100+100+(-1) = 199), а когда ввожу галлоны - минус один не уменьшает количество галлонов до 19 (10+10 + (-1)=20).


Добавлено через 18 минут
Всё, дошло - по длинной шее.

А вот что нужно сделать чтобы с прибавлением единиц не позориться - может какой if к милям пристроить? Или что еще?

Добавлено через 14 минут
0
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
02.11.2015, 06:14
Удутф, проверять введенное число, до того как оно будет подсчитано к общему кол-ву.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2015, 06:14
Помогаю со студенческими работами здесь

Код выдает один и тот же результат постоянно
Условие - определить, лежит ли окружность (x0,y0,r0) внутри другой окружности(x1,y1,r1)? #include "stdafx.h" #include...

Код выдает один и тот же результат постоянно
Нужно решить задачу: День авиации отмечается 12 апреля. Приходится ли в заданном году этот праздник на день недели n? g - год dn -...

Почему один и тот же шрифт разный?
Допустим есть сайт: На котором якобы используется Тахома 14 Вот я сделал тоже самое <div style="font-family: Tahoma;...

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

Memtest разный результат
Столкнулся с BSOD 0x000000a стал проверять оперативку MemTest показывает разные результаты то есть ошибки то их нет и всё работает....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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