2016-02-08 1 views
0

Я пишу программу базового калькулятора в java с помощью JOptionPane. Я очень новичок в этом, и любая помощь с проблемой, которую я имею, очень ценится! Я попытался исследовать это онлайн, но я только нахожу ответы, где сканер импортирован или порядок ввода пользователя отличается от моего.простой расчет в java - сообщите нам, что они должны использовать действительный оператор

Моя программа должна спросить пользователей о числе, чем они выбирают оператора для использования (+, -, *, /,%) и запрашивают у пользователей второе число. После этого вычисление выполняется и отображается результат.

Возможно ли использовать цикл while (а не цикл while) для проверки недопустимого оператора до ввода второго номера? У меня есть рабочий код, который проверяет недействительный оператор после ввода второго номера, но я хотел бы найти способ проверить его заранее, а затем повторно запросить пользователей для оператора до ввода действительного.

while (!useCalculator) { 
    num1 = JOptionPane.showInputDialog(null, "Please enter your first number:"); 
    numOne = Double.parseDouble(num1); 

    input = JOptionPane.showInputDialog(null, "Thank you! What would you like to do?\nPlease choose from the following options:\n+\n-\n*\n%\n/"); 

    num2 = JOptionPane.showInputDialog(null, "Thank you!\nPlease enter your second number:"); 
    numTwo = Double.parseDouble(num2); 

    if (input != null && input.equals("+")) 
    {add(numOne, numTwo); 
    result = add(numOne, numTwo); //I have this as a separate mehtod 
    JOptionPane.showMessageDialog(null, "The result of " + numOne + " " + input + " " + numTwo + " is: " + result); 
    } 
    else if (input != null && input.equals("-")) 
    {minus(numOne, numTwo); 
    result = minus(numOne, numTwo); 
    JOptionPane.showMessageDialog(null, "The result of " + numOne + " " + input + " " + numTwo + " is: " + result); 
    } 
    else if (input != null && input.equals("*")) 
    { multiply(numOne, numTwo); 
    result = multiply(numOne, numTwo); 
    JOptionPane.showMessageDialog(null, "The result of " + numOne + " " + input + " " + numTwo + " is: " + result); 
    } 
    else if (input != null && input.equals("/")) 
    { divide(numOne, numTwo); 
    result = divide(numOne, numTwo); 
    JOptionPane.showMessageDialog(null, "The result of " + numOne + " " + input + " " + numTwo + " is: " + result); 
    } 
    else if (input != null && input.equals("%")) 
    { modul(numOne, numTwo); 
    result = modul(numOne, numTwo); 
    JOptionPane.showMessageDialog(null, "The result of " + numOne + " " +  input + " " + numTwo + " is: " + result); 
    } 

    else JOptionPane.showInputDialog(null, "The operator is invalid. Please select a correct operator.\nPlease choose from the following options:\n+\n-\n*\n%\n/"); 

Дело в том, что я хочу понять и узнать, как это сделать. Я добавил часть своего кода для руководства (я могу добавить все, если нужно), но то, что я действительно ищу, - это объяснение того, как это сделать, чтобы я мог попробовать это самостоятельно и проделать свой путь через него. Приносим извинения, если это будет широким, я был бы рад очистить все, если понадобится! :)

Спасибо всем, T

ответ

0

просто вставить внутренний время на линии № 6 следующим образом:

while(input==null || !(input.equals("+") ||input.equals("*") || input.equals("/") || input.equals("-"))){ 
    input = JOptionPane.showInputDialog(null, "The operator has to to be either *,+,/,-") 
} 
+0

Возможно, оператор switch будет выглядеть чище. –

+0

Это было прекрасно - спасибо @simonarame (и всем остальным!). Я очень ценю быструю и вежливую помощь - новичок в java, это приятно иметь :) – Temp

0

Лексические анализаторы обычно обрабатывать полную строку идентификации каждого лексему (наименьшие единицы, как '+' и переменные), поэтому может потребоваться быстрее запросить выражение, например, 2 * 4 + 5, и идентифицировать каждую часть таким же образом, а не запрашивать пользователя несколько раз, возвращая ошибку, неудачно.