Как изменить значение переменной поверх одной и той же существующей переменной - несколько раз?(Джава) - PullRequest
0 голосов
/ 24 февраля 2019

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

Первый бит кода (показанный ниже) спрашивает пользователя, какое у него число, и сохраняет его в double называется "num."

Затем программа спрашивает пользователя, что он хочет сделать (сложить, вычесть, умножить, разделить или показать ответ), и я помещаю этов цикле , , потому что я думаю, что они могут захотеть работать с более чем 2 числами.Если пользователь хочет получить ответ, он выберет его, и цикл while прекратится.

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

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

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

Любая помощь будет оценена!Спасибо!

Я думаю, что эта ссылка может привести вас на сайт для редактирования, а что нет: https://repl.it/@ANGELRAMIREZ6/Basic-Calculator

Вот мой код:

import java.util.Scanner;

class Main {

  public static void main(String args[]) {

    Scanner userWhatWillDo = new Scanner(System.in);
    Scanner userNum = new Scanner(System.in);

    double num, answer;
    int what, numOfNums, keepGoing = 1;

    while (keepGoing == 1) {

       System.out.print("Enter a number: ");
       num = userNum.nextDouble();

       System.out.println("1=Add; 2=Subtract; 3=Multiply; 4=Divide; 5=Answer");
       what = userWhatWillDo.nextInt();

       switch(what) {
         case 1:
            num += num;
            break;

        case 2:
            num -= num;
            break;

        case 3:
            num *= num;

        case 4:
            num /= num;
      }

      if(what == 5) {
        keepGoing = 2;
        System.out.println(answer);
      }
  }
 }
}

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Appart другие пользователи заметили.Неправильный оператор регистра и несколько читателей в одном потоке.Я предлагаю следующее.

Вы должны инициализировать переменную answer перед использованием.например, 0.

Second num+=num означает num = num + num, и вы хотите накапливать результаты операции в виде ответа, answer = answer+num.Это может быть достигнуто с помощью answer+=num.

С этими изменениями ваш калькулятор должен работать правильно.

0 голосов
/ 26 февраля 2019

Спасибо всем, кто внес свой вклад и помог настроить мой код, мне удалось запустить мой самый первый калькулятор!Это очень просто и может действительно потребовать много работы;так много работы, но основы в значительной степени сделаны!По сути, это рабочий калькулятор!Тем не менее, он может только сложение, вычитание, умножение и деление.Это не может сделать намного больше, чем это.Если кто-то захочет посмотреть, что у меня сейчас есть, я опубликую ссылку на код, чтобы вы могли запустить его, если хотите.Еще раз спасибо всем.

Ссылка: https://repl.it/@ANGELRAMIREZ6/Basic-Calculator-1Fixed

(Как я исправил свой код - ОБЪЯСНЕНИЯ) - Хорошо, так что, оглядываясь назад на мой первый фрагмент кода, у меня не было необходимостиСканеры, которые я перестал брать (привет Томасу Клегеру и Стивену Спангину).

После этого я установил порядок расчетов.Изначально я не мог обернуть голову, как они должны были работать, поэтому я очень неуклюже заставил их всех относиться к одному и тому же коду: num + = num , который по сути был num= num + num (подпирает Цимкуса, Даниэля Риверо Капеллана и Стивена Спангина, которые открыли мне глаза на эту глупую ошибку. Я изменил ее на answer + = num , что имеет гораздо больше смысла.

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

До цикл будет непрерывно спрашивать, какие числа будут использоваться и что с ними делать (складывать, вычитать и т. д.), я подсказывал пользователю, чточисло, с которого они хотели начать, и установили это значение на ответ, , а затем я запустил цикл . В этом цикле любое число, введенное тем же запросом, Enterчисло будет сохранено в переменной num и в конечном итоге будет добавлено, вычтено, умножено или разделено на исходное число, значение которого было answer. И логически /математически это имеет смысл, учитывая, что первое значение будет answer, , а числа после будут num, , и имеет смысл, когда вы смотрите на этот код: answer += num .

В общем, это была простая программа с небольшим количеством хитрого выполнения, чтобы запустить ее (по крайней мере, для меня).Я рекомендую этот небольшой проект всем, кто является новичком в программировании на Java.Программа еще далека от завершения, и я уверен, что код мог бы выполняться намного эффективнее, но я продолжу и возьму свой char = W;для этого.(Я даже добавил ошибку «делить на ноль». Попробуйте сами!)

ОГРОМНОЕ СПАСИБО ВСЕМ, КТО ПОМОГИЛ!

В случае, если ссылка отсутствуетне работает, вот мой рабочий код:

import java.util.Scanner;

Scanner sc = новый сканер (System.in);

double num = 0,ответ = 0;int what, keepGoing = 1, keepAsking = 1;

System.out.println («Введите число:»);answer = sc.nextDouble ();

while (keepGoing == 1) {

  System.out.println("1=Add; 2=Subtract; 3=Multiply; 4=Divide; 5=Answer");
  what = sc.nextInt();

  if (what != 5) {
      do {
      System.out.println("Enter a number: ");
      num = sc.nextDouble();
      keepAsking = 2;
    }
  while (keepAsking == 1);
  }

  switch(what) {
    case 1:
    answer += num;
    break;

    case 2:
    answer -= num;
    break;

    case 3:
    answer *= num;
    break;

    case 4:
    answer /= num;
    break;
  }

  if (what == 4 && answer == 0) {
    System.out.println("ERROR. Cannot divide by zero. Try again.");
    keepGoing = 2;
  }

    if(what == 5) {
    keepGoing = 2;
    keepAsking = 2;
    System.out.println(answer);
    }
}
0 голосов
/ 24 февраля 2019
  • используйте println вместо печати, чтобы очистить вывод, или очистите вручную
  • Вам нужен только 1 сканер
  • init answer до 0
  • строк в вашемпереключатель должен изменить answer
      case 1:
      answer += num;
      break;
  • использовать break в каждом case

Также:

  • проверить divide by 0
  • перехватить неверные ошибки ввода
Scanner sc = new Scanner(System.in);

double num, answer=0;
int what, numOfNums, keepGoing = 1;

while (keepGoing == 1) {

    System.out.println("Enter a number: ");
    num = sc.nextDouble();

    System.out.println("1=Add; 2=Subtract; 3=Multiply; 4=Divide; 5=Answer");
    what = sc.nextInt();

    switch(what) {
      case 1:
      answer += num;
      break;

      case 2:
      answer -= num;
      break;

      case 3:
      answer *= num;
      break;

      case 4:
      answer /= num;
      break
    }

    if(what == 5) {
      keepGoing = 2;
      System.out.println(answer);
    }
}

Чтобы исправить логику вычислений:

  • Запросить номер и присвоить answer
  • Запустите цикл с запросом операции, затем наберите номер.
...