Почему мое программирование не выполняется правильно? (Джава) - PullRequest
0 голосов
/ 13 марта 2019

Требуемый вывод: Здравствуйте, я пытаюсь создать программу, которая выполняет сложение, вычитание, умножение, деление и циклы, пока вы не нажмете 'e', ​​чтобы выйти из цикла.

Итак, я хочу, чтобы это выглядело примерно так:

A. Addition
B. Subtraction
C. Multiplication
D. Division
E. Exit

Please enter your selection, enter E to end: 
//let's say they enter a, and want to add 5 plus 5

Enter your first number: 
Enter your second number:

5 + 5 = 10.0

Please enter your selection, enter E to end:
//This looping part is what I want to happen! But my program just ends, and I'm not 
sure how to fix it

Проблема: Моя проблема в том, что как только вы вводите нужную операцию, она выполняет арифметику только один раз, а затем отображает мое сообщение о выходе и завершается, но это должно произойти только тогда, когда пользователь вводит «Э», но остальное работает, я думаю!

Вот мой код

import java.util.Scanner;

public class Calculator_Loop {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);
    char selection;
    char choice = 'E';
    double num_1;
    double num_2;
    double result;


    System.out.println("A. Addition\nB. Subtraction\nC. Multiplication\nD. Division \n\nE. Exit");

    //System.out.println("\nPlease enter your selection, enter E to end:");
    //selection = input.next().charAt(0);
    //choice = Character.toUpperCase(selection);

    while(choice != 'E')
    System.out.println("\nPlease enter your selection, enter E to end:");
    selection = input.next().charAt(0);
    choice = Character.toUpperCase(selection);

    if(choice == 'A') {
        System.out.println("Enter your first number:");
        num_1 = input.nextDouble();
        System.out.println("Enter your second number:");
        num_2 = input.nextDouble();

        result = num_1 + num_2;
        System.out.println(result);

    }
    if(choice == 'B'){
        System.out.println("Enter your first number:");
        num_1 = input.nextDouble();
        System.out.println("Enter your second number:");
        num_2 = input.nextDouble();

        result = num_1 - num_2;
        System.out.println(result);

    }
    if(choice == 'C'){
        System.out.println("Enter your first number:");
        num_1 = input.nextDouble();
        System.out.println("Enter your second number:");
        num_2 = input.nextDouble();

        result = num_1 * num_2;
        System.out.println(result);
    }
    if(choice == 'D'){
        System.out.println("Enter your first number:");
        num_1 = input.nextDouble();
        System.out.println("Enter your second number:");
        num_2 = input.nextDouble();

        result = num_1 / num_2;
        System.out.println(result);
    }

    System.out.println("Thank you, have a nice day!");
    }
}

Что-то не так с скобками? Или мне чего-то не хватает, чтобы цикл работал? Любая помощь приветствуется, спасибо!

Ответы [ 4 ]

0 голосов
/ 13 марта 2019

Вместо использования условий if, пожалуйста, используйте цикл while и условие switch.если входное значение отличается от A, B, C или D, то выйдите из кода.

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

public class Calculator_Loop {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String choice = "";
        double num_1;
        double num_2;
        double result;

        System.out.println("A. Addition\nB. Subtraction\nC. Multiplication\nD. Division \n\nE. Exit");

        /*System.out.println("\nPlease enter your selection, enter E to end:");
        selection = input.next().charAt(0);
        choice = input.next().substring(0, 1).toUpperCase();*/

        outer: while (true) {
            System.out.println("\nPlease enter your selection, enter E to end:");
            choice = input.next();
            choice = choice.substring(0, 1).toUpperCase();
            switch (choice) {
            case "A":
                System.out.println("Enter your first number:");
                num_1 = input.nextDouble();
                System.out.println("Enter your second number:");
                num_2 = input.nextDouble();

                result = num_1 + num_2;
                System.out.println(result);
                break;

            case "B":
                System.out.println("Enter your first number:");
                num_1 = input.nextDouble();
                System.out.println("Enter your second number:");
                num_2 = input.nextDouble();

                result = num_1 - num_2;
                System.out.println(result);

                break;

            case "C":
                System.out.println("Enter your first number:");
                num_1 = input.nextDouble();
                System.out.println("Enter your second number:");
                num_2 = input.nextDouble();

                result = num_1 * num_2;
                System.out.println(result);

                break;

            case "D":
                System.out.println("Enter your first number:");
                num_1 = input.nextDouble();
                System.out.println("Enter your second number:");
                num_2 = input.nextDouble();

                result = num_1 / num_2;
                System.out.println(result);

                break;
            default:
                System.out.println("Thank you, have a nice day!");
                break outer;
            }
        }
    }
}
0 голосов
/ 13 марта 2019

Вам нужно заключить в скобки while нужную петлю, чтобы она работала так, как вы хотите:

while (choice != 'E') {
    System.out.println("\nPlease enter your selection, enter E to end:");
    selection = input.next().charAt(0);
    choice = Character.toUpperCase(selection);

    switch (choice) {
        case 'A':
            System.out.println("Enter your first number:");
            num_1 = input.nextDouble();
            System.out.println("Enter your second number:");
            num_2 = input.nextDouble();

            result = num_1 + num_2;
            System.out.println(result);
            break;

        case 'B':
            // ...
    }
}

System.out.println("Thank you, have a nice day!");

В настоящее время ваш цикл while будет вращаться вечно (я думаю), поскольку начальное значение для choice устанавливается на E.

Примечание: рассмотрите возможность использования оператора switch для обработки различных значений регистра для выбора.

0 голосов
/ 13 марта 2019

У тебя в классе две проблемы.

  • Одним из них является пропущенная скобка, о которой упоминали другие.
  • Другое дело, что он никогда не войдет в цикл, поскольку условие всегда ложно.

Итак, чтобы убедиться, что цикл введен хотя бы раз, когда вам нужно конечное условие. конструкция do-while вместо вашего начального условия.

Так что я превратил ваш цикл while в do-while. К этому я добавил недостающее вьющееся.

Я также изменил ваш if на переключатель, так как выбор требует его.

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

import java.util.Scanner;

public class Calculator_Loop {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        char selection;
        char choice = 'E';
        double num_1;
        double num_2;
        double result;


        do {
            System.out.println("A. Addition\nB. Subtraction\nC. Multiplication\nD. Division \n\nE. Exit");

            //System.out.println("\nPlease enter your selection, enter E to end:");
            //selection = input.next().charAt(0);
            //choice = Character.toUpperCase(selection);
            System.out.println("\nPlease enter your selection, enter E to end:");
            selection = input.next().charAt(0);
            choice = Character.toUpperCase(selection);
            switch (choice) {
                case 'A':
                    System.out.println("Enter your first number:");
                    num_1 = input.nextDouble();
                    System.out.println("Enter your second number:");
                    num_2 = input.nextDouble();
                    result = num_1 + num_2;
                    System.out.println(result);
                    break;
                case 'B':
                    System.out.println("Enter your first number:");
                    num_1 = input.nextDouble();
                    System.out.println("Enter your second number:");
                    num_2 = input.nextDouble();
                    result = num_1 - num_2;
                    System.out.println(result);
                    break;
                case 'C':
                    System.out.println("Enter your first number:");
                    num_1 = input.nextDouble();
                    System.out.println("Enter your second number:");
                    num_2 = input.nextDouble();

                    result = num_1 * num_2;
                    System.out.println(result);
                    break;
                case 'D':
                    System.out.println("Enter your first number:");
                    num_1 = input.nextDouble();
                    System.out.println("Enter your second number:");
                    num_2 = input.nextDouble();

                    result = num_1 / num_2;
                    System.out.println(result);
                    break;
            }
        } while (choice != 'E');
        System.out.println("Thank you, have a nice day!");
    }
}
0 голосов
/ 13 марта 2019

Добро пожаловать на SO. Проблема в том, насколько я вижу, что у вас ничего нет / только строка печати в вашем цикле while.

while(true) {
    do things
}

Java позволяет в то время как петля без скобок, но при максимальной одной линии (и я рекомендую делать их на одной линии тоже, но это debattable), как только вам нужно несколько строк, вам нужна скобка и должны иметь по отступу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...