无法从类中检索变量,并且遇到运行时/逻辑错误

时间:2019-02-13 20:10:03

标签: java eclipse

我正在尝试创建一个充当简单计算器的程序。我试图让用户输入他们想要进行哪种类型的计算以及他们想要计算什么数量,并且他们可以根据需要继续重复计算。

我相信我具有所需的所有代码,但是在尝试检索要计算的变量时遇到麻烦。当它捕获到异常时,我的循环也遇到了麻烦;当捕获到异常时,它会出错。我在尝试解决这些问题时遇到了困难。任何帮助或提示,我们将不胜感激!

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 :(得分:0)

据我所知,函数GetDoubleNumber具有双返回值,但是在驱动程序类中,您正在滥用它。 该函数还接收一个double类型的参数,但是您似乎对此没有任何作用。 在驱动程序类中调用该函数时,需要将其结果存储在这样的变量中:

double newNumber = GetDoubleNumber(NewNumber);

同样,该函数实际上不需要任何输入参数,因此可以将上述内容简化为 double newNumber = GetDoubleNumber(); 当然,您还必须更改函数的定义,以不接受任何参数。

如果我不得不猜测,我敢保证您相信在调用函数时作为参数传递给该函数的“ NewNumber”将存储结果,但事实并非如此。