这是我的任务, a)用int系数a,b,c写出表示二次方ax ^ 2 + bx + c的二次函数。为a,b,c提供带有3个int参数的构造函数。提供方法double valueAt(double x)在x处返回此二次函数的值。还提供了toString方法。
b)覆盖equals方法quadraticmethod类。如果两个二次函数各自的系数相等则应该被认为是相等的
c)使功能对象具有可比性。如果相等比较b,则compareTo应首先比较1,如果相等,则比较c
d)定义比较器类,用于比较两个QuadraticFunction对象。提供两个构造函数:一个no-argss构造函数和一个带有1个double参数的构造函数。当一个比较器由no-args构造函数创建时,它应该根据它们在x = 0时的值来比较两个quadraticFunction;当构造函数使用参数x创建比较器时,它应该基于它们在x的值来比较quadraticFunction
这是我的代码
我需要D部分的帮助,我不知道如何做一些
public class Ex4
{
int a;
int b;
int c;
public Ex4(int x, int y, int z)
{
a = x; b=y; c=z;
}
public String toString()
{
String X="";
X= X+a+"x^2"+b+"x"+ "+" + c;
return X;
}
public double valueAt(double x)
{
return (a*x*x+b*x+c);
}
//////// Part B
public boolean equals( Ex4 qf )
{
return(this.a==qf.a && this.b==qf.b && this.c==qf.c);
}
/////Part c
// public int compareTo(Ex4 other)
// {
// if (a.equals(other.a))
// {
// if (b.equals(other.b))
// return c.compareTo(other.c);
// return b.comapreTo(other.b);
// }
// return a.compareTo(other.a);
// }
public int compareTo(Ex4 other)
{
if (a > other.a)
return 1;
else if (a < other.a)
return -1;
else if (b > other.b)
return 1;
else if (b < other.b)
return -1;
else if (c > other.c)
return 1;
else if (c < other.c)
return -1;
else
return 0;
}
////Part d
public static void main(String[] args)
{
System.out.println(new Ex3(1, -5, 6));
}
}
同样在取消注释c部分下的代码区域时,它表示int不能在第29,31,32,33和35行中取消引用 谢谢你的帮助
答案 0 :(得分:0)
你不能在简单的原语上调用方法。
更好的选择是使用Integer的静态方法Integer.compare(int a, int b)
来比较两个整数。
答案 1 :(得分:0)
首先,编写自定义Comparator并不是非常困难;你需要了解一个人的基本结构。
这是一个想法:它有点像你在写Comparable
实体。
class CustomComparator implements Comparator<Ex4> {
@Override
public int compare(Ex4 left, Ex4 right) {
// Compare the entities as specified by the assignment
}
}
然后,您需要接受它作为构造函数参数。那,我作为练习留给读者。
现在,对于语法问题:您将原始int
视为Integer
,其中 有equals
方法。基元不是对象,因此不能解除引用。在这种情况下,您将需要使用常规等价运算符(==, >, <
)。您已经在第二个定义的compareTo
方法中解决了这个问题。
编辑:重新阅读您的要求后,我开始认为您的原始字段不是正确的方法。你应该:
int
更改为Integer
Comparable<Ex4>
compareTo()
Integer
的默认行为;也就是说,您的注释代码应“正常工作”(除了与C进行比较时拼写错误)compareTo
移至其自己的Comparator
实体,如上所述。答案 2 :(得分:0)
试试这个
import java.util.Comparator;
public class Ex4Comparator implements Comparator<Ex4> {
private double x = 0.0;
public Ex4Comparator() {
}
public Ex4Comparator(double x) {
this.x = x;
}
@Override
public int compare(Ex4 o1, Ex4 o2) {
return Double.compare(o1.valueAt(x), o2.valueAt(x));
}
}
此外,您的equals方法不会覆盖Object的equals方法。您可能希望将其更改为
@Override
public boolean equals(Object o) {
if (o instanceof Ex4) {
Ex4 other = (Ex4)o;
return (a == other.a && b == other.b && c == other.c);
}
return false;
}