首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让showData()针对不同的数据类型给出不同的结果?

如何让showData()针对不同的数据类型给出不同的结果?
EN

Stack Overflow用户
提问于 2020-05-25 01:56:26
回答 3查看 64关注 0票数 0

主类..。

代码语言:javascript
运行
复制
import java.io.*;
public class RecMain
{
    public static void main(String[]args)throws IOException
    {
        Rectangle rec1 = new Rectangle(5.3f,7.2f);
        Rectangle rec2 = new Rectangle();
        Rectangle rec3 = new Rectangle(12378438,37648363);



        rec1.showData();
        rec2.showData();
        rec3.showData();

    }
}

和Rectangle类

代码语言:javascript
运行
复制
import java.io.*;
class Rectangle
{

    private int len=0, bdt=0;
    private float len2=0, bdt2=0;
    public Rectangle()
    {
    }
    public Rectangle(int length, int breadth)
    {
        len=length;
        bdt=breadth;
    }
    public Rectangle(float length, float breadth)
    {
        len2=length;
        bdt2=breadth;
    }
    public void setData() throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        len2=Float.parseFloat(br.readLine());
        bdt2=Float.parseFloat(br.readLine());
    }
    public void showData()
    {
        System.out.println("Length: "+len+"\nBreadth: "+bdt);
        System.out.println("Length: "+len2+"\nBreadth: "+bdt2);
    }
}

我想做的是,对所有对象使用相同的showData(),这样对于rec1,结果将是len2和bdt2,而对于rec3,结果将是len和bdt。有什么方法可以做到这一点吗?

EN

回答 3

Stack Overflow用户

发布于 2020-05-25 02:10:33

您可以使用if检查len是否为0或len2是否为0,然后相应地显示结果。因此,如果len为0,则可以打印len2和bdt2。否则,显示len和bdt。

票数 0
EN

Stack Overflow用户

发布于 2020-05-25 02:19:09

如果你被允许使用泛型,你可以去掉重复的矩形参数:

代码语言:javascript
运行
复制
abstract class Rectangle<T extends Number> {
    protected T len, bdt;

    Rectangle() {}

    Rectangle(T length, T breadth) {
        this.len = length;
        this.bdt = breadth;
    }

    public void showData() {
        System.out.println("Length: " + len + ", breadth: " + bdt);
    }

    public abstract void setData() throws IOException;
}

//----- test -----
Rectangle<Float> rec1 = new Rectangle<Float>(5.3f, 7.2f) {
    @Override
    public void setData() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        len =Float.parseFloat(br.readLine());
        bdt =Float.parseFloat(br.readLine());
    }
};

Rectangle<Integer> rec2 = new Rectangle<Integer>(2, 3) {
    @Override
    public void setData() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        len =Integer.parseInt(br.readLine());
        bdt =Integer.parseInt(br.readLine());    
    }
};
rec1.showData();
rec2.showData();

输出:

代码语言:javascript
运行
复制
Length: 5.3, breadth: 7.2
Length: 2, breadth: 3
票数 0
EN

Stack Overflow用户

发布于 2020-05-25 02:46:28

我想知道为什么你的代码中有private int len=0, bdt=0;?你为什么不干脆把它们扔掉呢?

如下所示:

代码语言:javascript
运行
复制
import java.io.*;
class Rectangle {
    private float length, breadth;
    public Rectangle() {
    }

    public Rectangle(float length, float breadth) {
        this.length = length;
        this.breadth = breadth;
    }

    public void setData() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        length = Float.parseFloat(br.readLine());
        breadth = Float.parseFloat(br.readLine());
    }

    public void showData() {
        System.out.println("Length: "+length+"\nBreadth: "+breadth);
    }
}

来自RecMain的代码仍然可以编译。

PS:我想知道为什么您在原始代码中将lengthbreadth截断为lenbdt。这使得阅读变得更加困难。

我也会在你的代码中把float改成double

如果您出于某种原因需要使用带有int的矩形,我将使用一个具有公共接口的单独类:

代码语言:javascript
运行
复制
interface Rectangle {
   void setData() throws IOException;
   void showData();
}

然后像这样实现接口:

代码语言:javascript
运行
复制
class IntRectangle implements Rectangle {
    private int length, breadth;
    public Rectangle() {
    }

    public Rectangle(int length, int breadth) {
        this.length = length;
        this.breadth = breadth;
    }

    public void setData() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        length = Integer.parseInt(br.readLine());
        breadth = Integer.parseInt(br.readLine());
    }

    public void showData() {
        System.out.println("Length: "+length+"\nBreadth: "+breadth);
    }
}

具有float的类也是如此(将其重命名为FloatRectangle)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61990081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档