Невозможно получить переменную из класса и возникают ошибки времени выполнения / логики - PullRequest
0 голосов
/ 13 февраля 2019

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

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

import java.util.Scanner;
import java.util.InputMismatchException;

public class GetDouble {

public static double NewNumber;
public static int z=1;
public static int a=1;

static Scanner Input = new Scanner( System.in );

public static double GetDoubleNumber (double GetDouble)
{


    do {
        try{

                System.out.println("Please enter a number for the calculation.");
                double NewNumber = Input.nextDouble();

                a=2;
            }
            catch(InputMismatchException e) {
                System.out.println("Please enter a number. ");

                a=1;
            }
            }while(a==1);

    return NewNumber;

}

public static double DivideTwoNumbers (double Result, double NewNumber, double NewResult)
{

    do {
    try{
                GetDoubleNumber(NewNumber);
                NewResult = Result / NewNumber; 

                z=2;
        }
        catch(InputMismatchException e) {
            System.out.println("Please enter a number, the number can not be 0 when dividing. ");
        }
        }while(z==1);

    return NewResult;

}

}

//Driver Class
import java.util.Scanner;

public class SimpleCalculator extends GetDouble{

static Scanner Input = new Scanner( System.in );
public static double Result = 0.0;
public static double NewResult;
public static double NewNumber;
public static int y=1;
public static int z=1;


public static void main (String[] args) {

         do {

            System.out.println("Enter the type of calculation. (Examples: +, -, *, or /) ");
    String Calculation = Input.nextLine();

    do {

        switch (Calculation.charAt(0)) {

    case '+':

        GetDoubleNumber(NewNumber);
        NewResult = Result + NewNumber;

        System.out.println("New Result: " + NewResult);

        z=2;

        break;

    case '-':

        GetDoubleNumber(NewNumber);
        NewResult = Result - NewNumber;

        System.out.println("New Result: " + NewResult);

        z=2;

        break;

    case '*':

        GetDoubleNumber(NewNumber);
        NewResult = Result * NewNumber;

        System.out.println("New Result: " + NewResult);

        z=2;

        break;

    case '/':

        DivideTwoNumbers (Result, NewNumber, NewResult);
        System.out.println("New Result: " + NewResult);

        z=2;

        break;

    default:
            System.out.println("Please enter the type of calculation. (Examples: +, -, *, or /)  ");

            z=1;
        }

    }while(z==1);


              System.out.println("Enter 'Yes' to continue calculation \n "
                + "or 'Result' to see calculation result.");
         String Answer = Input.nextLine();


         if(Answer.charAt(0) == 'Y' || (Answer.charAt(0) == 'y'))
         {
            y=1;
         }
         if(Answer.charAt(0) == 'R' || (Answer.charAt(0) == 'r'))
         {
             System.out.println("Calculation result: " + Result);
             System.exit(0);
         }
         else
         {
             System.out.println("Please enter 'Yes' to continue calculation \n" 
                     + "or 'Result' to see calculation result.");

         }   


         }while(y==1);
 }
}

1 Ответ

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

Насколько я вижу, у вашей функции GetDoubleNumber есть двойное возвращаемое значение, но в классе драйверов вы его неправильно используете.Функция также получает параметр типа double, но вы, похоже, ничего с этим не делаете.При вызове функции в вашем классе драйвера вам необходимо сохранить ее результат в переменной, например, так:

double newNumber = GetDoubleNumber(NewNumber);

Опять же, функция на самом деле не нуждается ни в каких входных аргументах, поэтомуВыше можно упростить до double newNumber = GetDoubleNumber(); Вы, конечно, также должны будете изменить определение функции, чтобы не принимать аргументов.

Если бы мне пришлось угадывать, я бы рискнул вам поверить, что «NewNumber» вы передаете какаргумент функции при ее вызове сохранит результат, но это не так.

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