任何人都可以通过Generics和Comparable接口为我的任务提供解决方案吗?

问题描述 投票:-1回答:1

我写了一半,但不能100%正确。任何人都可以帮助我吗?

这是我的问题:

编写一个参数化类Triple,表示某种类型的三重奏(例如,三个字符串,整数等)。对于Triple类定义:

-getElement方法,接收整数(1,2或3)并返回相应的成员。在非法参数的情况下,抛出一个IllegalArgumentExpression异常-setElement,它接收两个参数:一个整数(1,2或3)以及作为三个成员放在相应位置的值(例如,setElement( 2,3)设置trio的3到y值) - 一个带有3个参数的构造函数,用于设置Triple的初始值

然后你应该编写ComparableTriple类,它代表三元组。三元组的成员必须具有可比性(实现Comparable接口)。然后展开ComparableTriple类以实现Comparable接口,以便三元组可以通过位置进行比较。例如,(2,6,1)在(3,4,5)之前的等级中,但在(2,6,-4)之后。相同的模板可以应用于String等。

主要代码示例:

三重t1 =新的ComparableTriple <>(2,6,1); int x = t1.compareTo(t1); //应该是0

//Triple class I wrote 

public class Triple<T> {
    T x, y, z;

    public Triple(T x, T y, T z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
    public T getElement(int position) {
        if (position == 1) {
            return x;
        } else if (position == 2) {
            return y;
        } else if (position == 3) {
            return z;
        } else throw new IllegalArgumentException();
    }
    public void setElement(int position, T value) {
        if (position == 1) {
            x = value;
        } else if (position == 2) {
            y = value;
        } else if (position == 3) {
            z = value;
        } else throw new IllegalArgumentException(); }
}

我尝试编写ComparableTriple重写CompareTo方法但无法找到确切的解决方案。它不是那么复杂,但我是Generics的新手,无法解决一些问题。任何人都可以帮我解决剩下的代码吗?

java comparable
1个回答
0
投票
public class Triple<T> implements Comparable<Triple<T>> {
  ... your code here
// functional interface Comparable will force you to override the method
}

但是你可能希望有一些T扩展的超类,这样你就可以访问比较的字段。

例:

public class Triple<T extends Number> implements Comparable<Triple<T>>

如果你不想承诺T是什么,当然可以与Collections.sort(可比较)进行内联比较。

这应该让你开始。如果卡住,请回复/编辑。干杯。

(这不是意图的解决方案)。仿制药是一种痛苦,需要勉强通过才能擅长。

© www.soinside.com 2019 - 2024. All rights reserved.