2015-04-29 53 views
0

我正在尝试使用多个类来制作一个简单的计算器。我可以在一个班级中做一个班,但现在我想尝试使用两个班级制作一个班级。我无法从OperationClass调用一些变量(fnum,snum,answer)。 如果我现在编写程序时运行该程序,则返回0作为答案。 我试着让变量fnum,snum和在OperationClass public中回答,但没有奏效。 另外我试过公共类OperationClass extends Calculator。那也行不通。
我知道我很想念一件很简单的事情。我只是不能指出它。多级计算器

计算器类:

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; 
     } 


    } 

} 

OperationClass:

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); 
    } 
} 
+0

你没有初始化你的''OperationClass实例成员'FNUM,snum' ... – ericbn

+0

当一个帖子把代码,选择整个代码,点击“{}”按钮的上方页。它会避免一些零件被遗漏。 –

回答

0

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

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

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

,并得到结果在Calculator你可以这样做:

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

你要用户输入存储在2名不同的变量。

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); 

    .... 
} 
+0

感谢大家的非常有帮助的答案。它清除了我脑海中的一些东西。我在Titus答案中使用了第一个选项。你能向我解释一些事吗?我明白你的解决方案发生了什么,但是我没有得到的是userInput1和userInput2(System.out.println(operationObject.addition(userInput1,userInput2));)如何得到附加方法? –

+0

我想我问的是返回fnum + snum做什么?它在哪里返回?我还创建了userInput1和userInput2,当我将它们传入case语句时,程序如何知道如何使用这两个变量并进行加,减,除或乘?一切正常,现在我只是想弄清楚这一切。 –

+0

该方法接受两个参数(两个'double'值),所以当你像这样调用方法时,'userInput1'内的'operationObject.addition(userInput1,userInput2)'变成'fnum','userInput2'变成'snum'执行该操作(在本例中为'fnum + snum'),结果返回到调用该方法的位置,也可以执行此操作'double return = operationObject.addition(userInput1,userInput2);' – Titus

0

您必须通过所述第一和第二int S作为参数。这涉及重写您的方法对象以接受2个参数,或创建一个接受2个参数的构造函数,并在之间输入数字后实例化对象

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

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

然后你实例化对象时调用它(再次,的数字有被输入)使用:

OperationClass operationObject = new OperationClass(firstInput, secondInput); 

您还需要修改输入,以便2个输入进入不同的变量。这是为了使它们可以作为参数传递。

1

您并未将OperationClass中的fnum和snum设置为任何值,因此它们的值为零。删除这些成员变量,并改变你的加法()减()等方法,把它们作为参数,就像这样:

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

首先,你需要存储两个inputed值不同的变量,所以第二不会覆盖第一:

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

一旦inputed,你可以通过这些变量的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); 
    } 
} 
0

您将两个数字收集到一个名为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); 
}