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

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте! Необходимо создать калькулятор. Он выводит неверные значения, не знаю как исправить, что я не так дела.
Надо именно через условный оператор с вложенными развилками.
Кликните здесь для просмотра всего текста
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
Ответы с готовыми решениями:

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

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

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

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

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2016, 02:39
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru