Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 12.03.2015
Сообщений: 35
1

Калькулятор выводит неправильные ответы

18.12.2016, 16:26. Показов 743. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Необходимо создать калькулятор. Он выводит неверные значения, не знаю как исправить, что я не так дела.
Надо именно через условный оператор с вложенными развилками.
Кликните здесь для просмотра всего текста
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
ublic class Самостоятельная {
 
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        double x;
        String c = "/";
        
        if (b==0){
         } else if (c == "+") {
           x = (a+b);
           System.out.println("Ответ: " + x);}
           else if (c == "-") {
               x = (a-b);
               System.out.println("Ответ: " + x);}
           else if (c == "/") {
               System.out.println("На ноль делить нельзя  ");}
           else if (c == "*") {
               x = (a*b);
               System.out.println("Ответ: " + x);}
    
 
        if (a>b){
         } else if (c == "+") {
           x = (a+b);
           System.out.println("Ответ: " + x);}
           else if (c == "-") {
               x = (a-b);
               System.out.println("Ответ: " + x);}
           else if (c == "/") {
               x = (a/b);
               System.out.println("Ответ: " + x);}
           else if (c == "*") {
               x = (a*b);
               System.out.println("Ответ: " + x);}
        
    if (a<b){
     } else if (c == "+") {
           x= (a+b);
           System.out.println("Ответ: " + x);}
       else if (c == "/") {
           x= (a/b);
  System.out.println("Ответ: " + x);}
       else if (c == "*") {
           x= (a*b);
           System.out.println("Ответ: " + x);}
       else if (c == "-") {
           x= (a-b);
       System.out.println("Ответ: " + x);}}}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2016, 16:26
Ответы с готовыми решениями:

Посчитать правильные и неправильные ответы пользователя
Товарищи форумчане! Прошу вашей помощи, нужно посчитать правильные и неправильные ответы...

Не получается вывести ошибки и правильные/неправильные ответы
А завтра сдавать :cry: &lt;html&gt; html&gt; &lt;head&gt; &lt;title&gt;Тест&lt;/title&gt; &lt;/head&gt; &lt;h1...

Программа тестирования - реализовать правильные/неправильные ответы
Пишу приложение, в котором нужно вводить ответ с клавиатуры. Так вот, как мне реализовать...

Опросник.Тест.Как сделать так,чтобы после нажатия отправить выделялись правильные и неправильные ответы(красный и зелены
&lt;!doctype html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; &lt;title&gt;Simple Multiple Choice Quiz with...

2
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
19.12.2016, 00:26 2
Цитата Сообщение от Ашатанчик Посмотреть сообщение
else if (c == "/") {
* * * * * * * *System.out.println("На ноль делить нельзя *");}
если b=0, вы не должны дойти до этого кода, зачем здесь это?
Цитата Сообщение от Ашатанчик Посмотреть сообщение
if (a>b)
вот этого условия вообще не понял, а что оно проверяет?

Добавлено через 9 минут
и строки лучше через equals сравнивать
0
33 / 33 / 20
Регистрация: 18.03.2016
Сообщений: 100
19.12.2016, 02:39 3
Надеюсь готовы к критике?

Половины условий вообще не понял. Зачем они нужны? О_о
Для начала прокомментирую ваш код:
Кликните здесь для просмотра всего текста

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
ublic class Самостоятельная {  //Видимо опечатка, вначале public. А ещё не надо называть классы
                                           // кириллицей, потом проблем не оберёшься.
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        double x;
        String c = "/";  /*Числа и действия задаются в коде? 
                             Не пользователь указывает, что он хочет посчитать?*/
        if (b==0){  //И не надо оставлять блок кода пустым. Лучше добавить отрицание условия b!=0, 
         } else if (c == "+") { // тогда то, что после else можно будет писать в основном блоке.
           x = (a+b); /*Почему сложение происходит только при b=0? 
                           Разве нельзя сложить 7 и 0, например?*/
           System.out.println("Ответ: " + x);}//можно было совсем избавиться от переменной x и
                                                  //вместо x здесь указать (a+b)
           else if (c == "-") {
               x = (a-b);
               System.out.println("Ответ: " + x);}//Опять таки вместо x можно 
                                                           //указать (a-b) и убрать совсем x.
           else if (c == "/") {//Знаете, когда это сообщение выведется?
                                    //Когда c="/", а b != 0. Т.е. как раз тогда,
               System.out.println("На ноль делить нельзя  ");}// когда деление не на ноль.
           else if (c == "*") {/*Опять таки, разве нельзя умножать на ноль?
                                         Зачем в одном месте умножать на ноль,
                                          а в других местах на остальные числа?
                                         при этом результат выведется 2 раза при b!=0...*/
               x = (a*b);        
               System.out.println("Ответ: " + x);} //Здесь тоже можно убрать x и заменить его на (a*b)
    
 
        if (a>b){      // Вообще не понял. Какая разница, какое число больше?
         } else if (c == "+") { //Арифметические действия одинаковы со всеми числами!
           x = (a+b);
           System.out.println("Ответ: " + x);}
           else if (c == "-") {
               x = (a-b);
               System.out.println("Ответ: " + x);}
           else if (c == "/") {
               x = (a/b);                  // А что если b = 0 ?! Здесь оно как раз может быть равно нулю.
               System.out.println("Ответ: " + x);} // у вас произойдёт здесь ошибка из-за попытки 
                                                                //делить на ноль, если b=0, а a<=0      
           else if (c == "*") { // здесь мы второй раз выведем результат умножения,
                                      //если a<b и b!=0. А что, нормально!
               x = (a*b);
               System.out.println("Ответ: " + x);}
        
    if (a<b){                      // Уже в 3-й раз пустой блок. Ну ведь с отрицанием !(a<b) проще и короче!
                                     //А можно ещё написать a>=b.
     } else if (c == "+") { //здесь мы в третий раз выведем результат сложения, если a=b и b!=0.
           x= (a+b);
           System.out.println("Ответ: " + x);}
       else if (c == "/") {
           x= (a/b);                            // о том, что здесь произойдёт деление на ноль, если a>=0 && b==0
                                          // и говорить как-то странно.
  System.out.println("Ответ: " + x);}
       else if (c == "*") {
           x= (a*b);
           System.out.println("Ответ: " + x);}
       else if (c == "-") {
           x= (a-b);
       System.out.println("Ответ: " + x);}}} /*Ну и наконец, зачем выводить ответ во второй раз.
Если не вылезет в редком случае ошибки, то 100% будет выведено
"на ноль делить нельзя", а потом ответ, а то и дважды ответ выведет. Могу объяснить, почему.*/

Теперь предлагаю свой, тоже чисто на операторе if с вложенными развилками, но с введением чисел пользователем:
Кликните здесь для просмотра всего текста

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
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
 
        double a=0, b=0;
        char c='+';
        Scanner scanner = new Scanner(System.in);
        boolean bool = false;
        while (!bool) {
            System.out.println("Введите первое число, для записи дроби используйте запятую:");
            if (scanner.hasNextDouble()) {
                a = scanner.nextDouble();
                scanner.nextLine();
                bool = true;
            } else if (scanner.hasNextLine()) System.out.println(scanner.nextLine() + " не является числом.");
        }
        while (bool) {
            System.out.println("Введите знак арифметического действия:");
            if (scanner.hasNextLine()) {
                c = scanner.nextLine().charAt(0);
                if (c == '+' || c == '-' || c == '*' || c == '/')
                    bool = false;
            } else System.out.println(c + " не является знаком арифметического действия.");
        }
        while (!bool) {
            System.out.println("Введите второе число, для записи дроби используйте запятую:");
            if (scanner.hasNextDouble()) {
                b = scanner.nextDouble();
                bool = true;
            } else if (scanner.hasNextLine()) System.out.println(scanner.nextLine() + " не является числом.");
        }
        System.out.print(a + " " + c + " " + b + " = ");
        if (c == '+')
            System.out.println(a+b);
        else if (c == '-')
            System.out.println(a-b);
        else if (c == '*')
            System.out.println(a*b);
        else if (b != 0)
            System.out.println(a/b);
        else System.out.println("?\nНа ноль делить нельзя!");
 
    }
}

Ну и код самый простой, где как у вас, числа задаются в самой программе, как константы:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Main {
 
    public static void main(String[] args) {
 
        double a=0, b=0;
        char c='+';
        
        
        System.out.print(a + " " + c + " " + b + " = ");
        if (c == '+')
            System.out.println(a+b);
        else if (c == '-')
            System.out.println(a-b);
        else if (c == '*')
            System.out.println(a*b);
        else if (b != 0)
            System.out.println(a/b);
        else System.out.println("?\nНа ноль делить нельзя!");
 
    }
}
1
19.12.2016, 02:39
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2016, 02:39
Помогаю со студенческими работами здесь

Строковый калькулятор выдает неправильные значения на русском
На английском всё работает отлично, а с русскими символами каждый символ считается как 2. Как...

Запрос выводит неправильные данные
Мне нужно из двух таблиц вывести 2 строки. запрос выводит данные но все в кучу . вот так номер ...

Программа выводит неправильные результаты
program d; uses crt; var a:array of integer; s:real; i,n,k: integer; begin randomize;...

Программа выводит неправильные числа
короче у меня вопрос: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main() { int x;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как запретить подсветку выделенного текста с помощью CSS
InfoMaster 20.01.2025
Подсветка текста при выделении является стандартным поведением браузера, которое не всегда соответствует дизайнерским решениям или функциональным требованиям веб-приложения. Выделение текста может. . .
Как выполнить другую программу или системную команду из Python
InfoMaster 20.01.2025
Python предоставляет мощные инструменты для выполнения системных команд и управления внешними процессами, что делает его идеальным выбором для автоматизации различных задач системного. . .
Как узнать директорию bash-скрипта из самого bash-скрипта
InfoMaster 20.01.2025
При разработке bash-скриптов одной из важных задач является определение директории, в которой находится исполняемый скрипт. Это критически важно для корректной работы с файлами, загрузки конфигураций. . .
В чем разница между let и var в JavaScript
InfoMaster 20.01.2025
JavaScript прошел длинный путь эволюции с момента своего создания в 1995 году. Одним из важнейших аспектов развития языка стало совершенствование механизмов объявления и управления переменными. . . .
Эффективная работа со строками в Go
InfoMaster 20.01.2025
Язык программирования Go предлагает уникальный подход к работе со строками, который существенно отличается от многих других языков программирования. В Go строки представляют собой неизменяемые. . .
Как проверить, что отображение (map) содержит ключ в Go
InfoMaster 20.01.2025
Отображения (maps) в языке программирования Go представляют собой мощные структуры данных, которые позволяют хранить пары ключ-значение и обеспечивают быстрый доступ к данным по уникальным. . .
Как организовать домашнее хранилище фильмов с общим доступом для всей семьи
InfoMaster 20.01.2025
Преимущества домашнего медиасервера В современном мире, где цифровой контент стал неотъемлемой частью нашей жизни, организация домашнего медиасервера становится все более актуальной задачей. . . .
Перспективы развития жестких дисков: есть ли у них будущее?
InfoMaster 20.01.2025
История и эволюция жестких дисков История развития жестких дисков начинается в 1956 году, когда компания IBM представила первое устройство для хранения данных на магнитных пластинах - IBM 350. . .
Распознавание изображений (компьютерное зрение) на C++
InfoMaster 20.01.2025
Введение в компьютерное зрение и основы работы с изображениями Компьютерное зрение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, позволяющую. . .
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru