有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多类计算器

我正在尝试使用多个类制作一个简单的计算器。我可以在一个类中创建一个,但现在我想尝试使用两个类创建一个。我在从OperationClass调用一些变量(fnum、snum、answer)时遇到问题。 如果我按照现在编写的方式运行程序,则返回0作为答案。 我尝试在OperationClass中公开变量fnum、snum和answer,但没有成功。 我还尝试了公共类操作类扩展计算器。这也不管用
我知道我错过了一些非常简单的事情。我就是不能用别针指着它

计算器类:

import java.util.Scanner;

public class Calculator{

    public static void main(String[] args) {

        OperationClass operationObject = new OperationClass();


        Scanner input = new Scanner(System.in);
        double userInput;
        int userChoice;

        System.out.print("Please Enter The First Number: ");
        userInput = input.nextDouble();
        System.out.print("Please Enter The Second Number: ");
        userInput = input.nextDouble();
        System.out.println("Please Select Operation to Perform:");
        System.out.println("1-Addition");
        System.out.println("2-Subtraction");
        System.out.println("3-Division");
        System.out.println("4-Multiplication");
        userChoice = input.nextInt();

        switch (userChoice){
        case 1:
            operationObject.addition();
            System.out.println();
            break;
        case 2:
            operationObject.subtraction();
            break;
        case 3:
            operationObject.division();
            break;
        case 4:
            operationObject.multiplication();
            break;
        }


    }

}

操作类:

public class OperationClass{

    double fnum, snum, answer;

    public void addition(){
        answer = fnum + snum;
        System.out.println(answer);
    }

    public void subtraction(){
        answer = fnum - snum;
        System.out.println(answer);
    }

    public void division(){
        answer = fnum / snum;
        System.out.println(answer);
    }

    public void multiplication(){
        answer = fnum * snum;
        System.out.println(answer);
    }
}

共 (5) 个答案

  1. # 1 楼答案

    您需要将第一个和第二个int作为参数传递。这包括重新编写方法对象以接受2个参数,或者创建一个接受2个参数的构造函数,并在输入数字后实例化对象

    要创建构造函数(这将允许您在类中设置变量并使用它们):

    public OperationClass(int fnum, int snum){
        this.fnum = fnum;
        this.snum = snum;
    }
    

    然后在实例化对象时调用它(同样,在输入了数字之后,),使用:

    OperationClass operationObject = new OperationClass(firstInput, secondInput);
    

    您还需要修改输入,以便这两个输入包含不同的变量。这样就可以将它们作为参数传递

  2. # 2 楼答案

    首先,需要将两个输入的值存储到不同的变量中,以便第二个变量不会覆盖第一个变量:

    System.out.print("Please Enter The First Number: ");
    fnum = input.nextDouble();
    System.out.print("Please Enter The Second Number: ");
    snum = input.nextDouble();
    

    输入后,可以将这些变量传递给OperationClass的方法:

    public class OperationClass{
    
        public void addition(double fnum, double snum){
            double answer = fnum + snum;
            System.out.println(answer);
        }
    
        public void subtraction(double fnum, double snum){
            double answer = fnum - snum;
            System.out.println(answer);
        }
    
        public void division(double fnum, double snum){
            double answer = fnum / snum;
            System.out.println(answer);
        }
    
        public void multiplication(double fnum, double snum){
            double answer = fnum * snum;
            System.out.println(answer);
        }
    }
    
  3. # 3 楼答案

    OperationClass中没有将fnum和snum设置为任何值,因此它们的值为零。删除这些成员变量,并更改加法()减法()等方法,将其作为参数,如下所示:

    public void addition(double fnum, double snum) { 
        answer = fnum + snum;
        System.out.println(answer);
    } 
    
  4. # 4 楼答案

    将这两个数字收集到一个名为userInput的变量中。第一个被第二个覆盖,然后你再也不会引用它了。为了让OperationClass处理这些值,您应该有方法来设置这些值,或者将它们作为参数传递给正在执行的操作

    对于第一种情况,可以添加如下setter方法:

    public void setFNum(double f) {
        fnum = f;
    }
    public void setSNum(double s) {
        snum = s;
    }
    

    然后,在从用户那里得到一个值之后,使用这些方法设置它

    System.out.print("Please Enter The First Number: ");
    userInput = input.nextDouble();
    operationObject.setFNum(userInput);
    System.out.print("Please Enter The Second Number: ");
    userInput = input.nextDouble();
    operationObject.setSNum(userInput);
    

    第二种方法是,可以让OperationClass中的方法将这两个数字都作为参数,并且永远不要在内部设置它

    public void multiplication(double fnum, double snum){
        answer = fnum * snum;
        System.out.println(answer);
    }
    
  5. # 5 楼答案

    您需要将用户输入的值传递给OperationClass类。 有多种方法可以做到这一点

    1)选项一。更改方法以接受某些参数,例如:

    public double addition(double fnum, double snum ){
          return fnum+snum;
    }
    

    要在Calculator中获得结果,可以执行以下操作:

     case 1:
        System.out.println(operationObject.addition(userInput1, userInput2));
        break;
    

    您必须将用户输入存储在两个不同的变量中

    2)将用户的输入作为类变量存储在OperationClass

    public class OperationClass{
         .....
         public void setFNum(double fnum){
             this.fnum = fnum
         }
         public void setSNum(double snum){
             this.snum = snum
         }
         ......
    }
    

    要传递来自Calculator的值,可以这样做

    public static void main(String[] args) {
    
        ....
    
        OperationClass operationObject = new OperationClass();
        Scanner input = new Scanner(System.in);
        double userInput;
        userInput = input.nextDouble();
        operationObject.setFNum(userInput);
        userInput = input.nextDouble();
        operationObject.setSNum(userInput);
    
        ....
    }