【问题标题】:Data Abstraction and Encapsulation数据抽象与封装
【发布时间】: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


【解决方案1】:

要解决您的问题,您可能需要更换

new Algebra(number1,number2);

d = new Algebra(number1,number2);

在您的代码中,您的对象 d 是默认值,其中 number1 和 number2 设置为零。

您可能还想格式化您的代码并考虑您的接口层次结构,这似乎并不真正有用

【讨论】:

  • 我刚开始接触接口和继承,我不是这方面的专家。我很快就会擅长这个。感谢修复
【解决方案2】:

在收到同行的宝贵建议后,我对代码进行了格式化。 最终代码如下。

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

【讨论】:

    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 2018-06-29
    • 2013-02-17
    • 2012-05-24
    • 2017-11-01
    • 2021-07-24
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多