Как я могу сохранить свою ценность от оператора if? - PullRequest
0 голосов
/ 22 ноября 2018

Я попытался сделать очень простой калькулятор, но если я пытаюсь вывести вычисленный результат, я получаю ошибку, что моя переменная «результат» не была инициализирована, даже если я инициализировал ее внутри оператора if внизу.Когда я помещаю строку «System.out» в мой оператор if, он работает, поэтому я удивляюсь, как можно инициализировать переменную в моем выражении и сохранить значение.

Но все, что я нашел, были темы, в которых говорилось об использовании «return» для выдачи значения, но не переменной.

import javax.swing.JOptionPane;
class Calculator{
public static void main(String[] args)
{
    double z1, z2, result;
    String input, s;

    input = JOptionPane.showInputDialog("Input a number:");

  //check whether or not the input is a number
        if(isNumber(input) == false)
        {
            JOptionPane.showMessageDialog(null, "Input a real Number", "Error",JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }

    z1 = Double.parseDouble(input);

    input = JOptionPane.showInputDialog("Input a second number:");

  //check whether or not the input is a number
        if(isNumber(input) == false)
        {
            JOptionPane.showMessageDialog(null, "Input a real number", "Error",JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }
    z2 = Double.parseDouble(input);

    s = JOptionPane.showInputDialog("Input an operation(+,-,*,/):");        

    if(s.equals("+"))
    { result = z1 + z2; }
    if(s.equals("-"))
    { result = z1 - z2; }
    if(s.equals("*"))
    { result = z1 * z2; }
    if(s.equals("/"))
    { result = z1 / z2; }

    System.out.println(result);

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Поскольку этот код:

if(s.equals("+"))
{ result = z1 + z2; }
if(s.equals("-"))
{ result = z1 - z2; }
if(s.equals("*"))
{ result = z1 * z2; }
if(s.equals("/"))
{ result = z1 / z2; }

не имеет окончательного оператора else, не гарантируется, что result будет инициализирован.Один из способов преодоления этой проблемы:

    if (s.equals("+")) {
        result = z1 + z2;
    } else if (s.equals("-")) {
        result = z1 - z2;
    } else if (s.equals("*")) {
        result = z1 * z2;
    } else if (s.equals("/")) {
        result = z1 / z2;
    } else {
        result = 0.0;
    }

или в определении:

double result = 0.0;
0 голосов
/ 22 ноября 2018

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

double z1, z2, result = 0;
...