数据抽象和封装

问题描述:

我想通过使用数据抽象和封装来实现一个小程序来进行基本计算。 但每种情况下的输出产生零。 任何人都可以找到我在执行代码时出错的错误。数据抽象和封装

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

对于每种情况,输出为零。

+0

格式化您的代码属性 –

+0

为什么您的操作符彼此继承?你不能只有一个'运营商'接口和Mul/Sub/Div等的实现吗? – byxor

+1

您正在创建2个代数对象'代数A =新代数(); d =(代数)A;''和'新代数(number1,number2);'你将参数传递给1个对象,然后用另一个来调用计算方法。这就像在一台计算器上输入数据,然后到另一台计算器并按等号。它不会明显工作。 –

我格式化代码从同级接收宝贵的建议非常有用。最终代码如下。

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

我刚开始接口和继承,我不是亲这个。我很快就会很好。感谢您的修复 –