数据抽象和封装
问题描述:
我想通过使用数据抽象和封装来实现一个小程序来进行基本计算。 但每种情况下的输出产生零。 任何人都可以找到我在执行代码时出错的错误。数据抽象和封装
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;
}
}
}
对于每种情况,输出为零。
答
我格式化代码从同级接收宝贵的建议非常有用。最终代码如下。
import java.util.Scanner;
/*Data Abstraction Using interface */
interface Operation
{
int sum();
int mul();
int sub();
int div();
}
/* Or Using Abstract Class
abstract class Operation
{
abstract int sum();
abstract int mul();
abstract int sub();
abstract int div();
}
class Algebra extends Operation (Inheritance)
{
code..
}
*/
class Algebra implements Operation
{
private int number1,number2;
Algebra()
{
number1=0;
number2=0;
}
Algebra(int number1,int number2)
{
this.number1=number1;
this.number2=number2;
}
/* Encapsulation of the Data Memebers and Functions*/
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(); //Dynamic Object of Sub Class
Operation Op; //Static Object
Op=(Algebra)A; //Type Casting of the Static Object of interface or abstract class
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);
Op=new Algebra(number1,number2);
switch(choice)
{
case '1':
System.out.println("Sum is : "+Op.sum());
break;
case '2':
System.out.println("Mul is : "+Op.mul());
break;
case '3':
System.out.println("Div is : "+Op.div());
break;
case '4':
System.out.println("Sub us : "+Op.sub());
break;
}
}
}
答
要解决你的问题,你可能需要更换
new Algebra(number1,number2);
与
d = new Algebra(number1,number2);
在你的代码的对象d是默认的一个用数字1和数字2设置为零。
您可能还需要格式化你的代码,想想你的接口层次结构这似乎并不
+0
我刚开始接口和继承,我不是亲这个。我很快就会很好。感谢您的修复 –
格式化您的代码属性 –
为什么您的操作符彼此继承?你不能只有一个'运营商'接口和Mul/Sub/Div等的实现吗? – byxor
您正在创建2个代数对象'代数A =新代数(); d =(代数)A;''和'新代数(number1,number2);'你将参数传递给1个对象,然后用另一个来调用计算方法。这就像在一台计算器上输入数据,然后到另一台计算器并按等号。它不会明显工作。 –