Модульный калькулятор Java

#java

#java

Вопрос:

Я пытаюсь решить проблему с аббатством кода, и я очень застрял. Моя цель для программы — принимать числа с помощью математической операции перед числом и выполнять эту математическую операцию, такую как:

  5
  3
* 7
  10
* 2
* 3
  1
% 11

answer:
1
  

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

 import java.util.Scanner;

public class ModularCalculator {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter Initial Number:");
        int iN = in.nextInt();
        int sum = 0;

        for (int i = 0; i <= 1000000; i  ) {
            String a = in.next();
            int b = in.nextInt();

            if (a.equalsIgnoreCase(" ")) {
                System.out.println(b   iN);
            } else if (a.equalsIgnoreCase("*")) {
                System.out.println(b * iN);
            } else {
                System.out.println(b % iN);
                sum = b   iN;
            }

        }
    }
}
  

Комментарии:

1. Что происходит, и что вы хотите, чтобы произошло?

2. Я тоже хочу либо добавить значения, либо умножить и продолжать делать это до тех пор, пока модуль не выполнит это над суммой

Ответ №1:

Ваша проблема в том, что вы не выполняете правильную алгебру. Запомните порядок операций. В вашем конкретном случае мы можем упростить его, чтобы использовать только те операции, которые у вас есть, а именно: Multiply, Modulo, Addition . Технически, Modulo на самом деле не стандартизирован в том, где он упорядочен, но я думаю, что большинство языков имеют значение Modulo как такое же, как умножение / деление, поэтому лучше всего упорядочить его таким образом.

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

Комментарии:

1. codeabbey.com/index/task_view/modular-calculator на самом деле нет, это не для домашней работы, это codeabey, и я просто пытаюсь стать лучше:(

2. Хорошо, это немного объясняет. Я никогда раньше не видел этот сайт, но на первый взгляд я бы держался подальше. Как я уже сказал, Modulo не имеет стандартного приоритета, поэтому, если Modulo имеет высокий приоритет, ответ должен быть 4, а если он имеет низкий приоритет, тогда это будет 6. Тот факт, что они говорят, что это 1 кажется мне красным флагом.

Ответ №2:

это не будет работать правильно! потому что вы работаете неправильно, например :

ответ на 1 2*3 равно 7, но ваша программа вернет 9 в качестве ответа

я думаю, вы должны узнать о postfix и prefix и о том, как использовать stack для достижения этой цели, вот ссылка для изучения :

http://www.cs.man.ac.uk /~pjj/cs212/fix.html

Комментарии:

1. То же самое касается и вас: пожалуйста, удалите любой код из вашего ответа и объясните на простом английском языке. StackOverflow — это не то место, куда могут приходить студенты колледжей / старших классов и заставлять людей выполнять за них домашние задания.

2. @searchengine27 я не понимаю, почему вы отклонили мой ответ, вы могли бы отредактировать мой ответ… хорошо, я удалю код, я этого не знал !

3. Это не имеет никакого отношения к вашему code…in на самом деле, я ценю, что вы хотели помочь в решении вопроса, разместив код — я это делаю. Но в этом случае человек, задающий вопрос, пытается учиться, поэтому бросание в них стены кода им не поможет. В подобных случаях, на мой взгляд, лучше объяснить им это, а затем позволить им решить вопрос.

4. @searchengine27 вы правы, я должен просто объяснить идею и отправить ссылку

5. Спасибо за удаление кода, я удалил понижающий голос.

Ответ №3:

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

     Scanner in = new Scanner(System.in);
    System.out.println("Enter Initial Number:");
    int iN = in.nextInt();
    int sum = 0;
    for (int i = 0; i <= 1000000; i  ) {
        String a = in.next();
        int b = in.nextInt();
        if (a.equalsIgnoreCase(" ")) {
            iN = b   iN;
        } else if (a.equalsIgnoreCase("*")) {
            iN = b * iN;
        } else {
            iN = b % iN;
            sum = b   iN;
        }
        System.out.println(iN);
    }
  

Комментарии:

1. Во-первых, пожалуйста, отформатируйте свой код. Во-вторых, это для домашнего задания, поэтому, пожалуйста, удалите любой код из вашего ответа и объясните на простом английском языке. StackOverflow — это не то место, куда могут приходить студенты колледжей / старших классов и заставлять людей выполнять за них домашние задания.

2. «iN» — это переменная, которая должна сохранять значение из последнего вычисления. Просто добавил эту строку «iN = // независимо от вычисления», и ваш код работает

3. Честно говоря, вы не можете перестать быть таким? codeabbey.com/index/task_view/modular-calculator это на codeabbey, и я практикую

4. это не будет работать правильно! потому что вы работаете неправильно, например: ответ 1 2*3 равно 7, но ваша программа вернет 9 в качестве ответа

5. Этот ответ или решение, предписанное AAnwar007, будет работать только в том случае, если вычисления выполняются в порядке, точнее, последовательно. Вам следует изучить постфиксные и инфиксные обозначения, но, насколько известно Codeabbey, мой правильный ответ. Приветствия