【发布时间】:2017-11-29 07:42:16
【问题描述】:
我正在尝试通过使用数据抽象和封装来实现一个用于进行基本计算的小程序。 但是每个案例的输出都为零。 任何人都可以找到我在实施本准则时出错的地方吗?
import java.util.Scanner;
interface Sum
{
int sum();
}
interface Sub extends Sum
{
int sub();
}
interface Mul extends Sub
{
int mul();
}
interface Div extends Mul
{
int div();
}
class Algebra implements Sum,Mul,Sub,Div
{
private int number1,number2;
Algebra()
{
number1=0;
number2=0;
}
Algebra(int number1,int number2)
{
this.number1=number1;
this.number2=number2;
}
public int sum()
{
return number1+number2;
}
public int mul()
{
return number1*number2;
}
public int div()
{
return number1/number2;
}
public int sub()
{
return number1-number2;
}
}
class Test
{
public static void main(String [] args)
{
int number1,number2;
char choice;
Scanner input=new Scanner(System.in);
Algebra A=new Algebra();
Div d;
d=(Algebra)A;
System.out.println("Enter the number 1 : ");
number1=input.nextInt();
System.out.println("Enter the numbre 2 : ");
number2=input.nextInt();
System.out.println("Enter choice : 1.)Sum 2.)Mul 3.)Div 4.)Sub ");
choice=input.next().charAt(0);
d=new Algebra(number1,number2);
switch(choice)
{
case '1':
System.out.println("Sum is : "+d.sum());
break;
case '2':
System.out.println("Mul is : "+d.mul());
break;
case '3':
System.out.println("Div is : "+d.div());
break;
case '4':
System.out.println("Sub us : "+d.sub());
break;
}
}
}
每种情况的输出为零。
【问题讨论】:
-
格式化您的代码属性
-
为什么你们的运营商要互相继承?难道你不能只有一个
Operator接口和一个Mul/Sub/Div 等的实现吗? -
您正在创建 2 个代数对象
Algebra A=new Algebra(); d=(Algebra)A;和new Algebra(number1,number2);您将参数传递给 1 个对象,然后使用另一个对象调用计算方法。这就像在一个计算器上输入数据,然后转到另一个计算器并按等号。它显然不会起作用。 -
快速解决您的问题
d = new Algebra(number1,number2);总的来说,您缺乏对软件设计的基本了解。 -
明白你的意思@OHGODSPIDERS 谢谢。我正在使用不是接口属性的私有变量。
标签: java constructor interface encapsulation abstraction