[英]OOP in Java: problem with constructor and methods
我是 Java 新手,我正在尝试编写一个带有构造函数和方法的类,这些方法可以将两个数字相加和相除,并比较一个对象是否大于或等于另一个对象。 但是我收到一个错误: The method plus(int) in the type Compare is not applicable for the arguments (Compare)
。 怎么了?
这是代码:
public class Compare {
// fields
private int number;
private int plus;
private double div;
// constructor
public Compare (int n) {
number = n;
}
public int plus (int x) {
return this.number + x;
}
public int div (int x) {
return this.number / x;
}
public boolean isLargerThan (int x) {
return this.number > x;
}
public boolean isEqualTo (int x) {
return this.number == x;
}
public static void main(String[] args) {
Compare n1 = new Compare(9);
Compare n2 = new Compare(4);
Compare sum = n1.plus(n2);
Compare div = n1.div(n2);
boolean check1 = sum.isLargerThan(n1);
boolean check2 = div.isLargerThan(n2);
boolean check3 = div.isEqualto(sum);
}
}
要求是使用等于 n1 加 n2 的比较构造函数创建 sum 和 div 对象,并使用 plus 方法或除法(视情况而定)。
可能是在这里您想要一个包含总和的新比较。
public Compare plus (int x) {
return new Compare(number + x);
}
public Compare plus (Compare x) {
return new Compare(number + x.number);
}
这也暗示着需要一个 Compare 对象,而不是如图所示的 int。
使用该Compare
将变得不可变,这非常好,因为您可以毫无问题地共享不同变量中的对象(更改一个变量的值更改其他变量的值)。
@Override
public String toString() {
return Integer.toString(number);
}
public int intValue() {
return number;
}
这里的问题是对于“Compare”类中的“plus”、“div”、“isLargerThan”和“isEqualTo”方法,参数/返回类型是“int”类型。 但是在“main”函数中,您正在传递对象并期望“Compare”类型的对象。
要修复它,请将“Compare”类中这些方法的参数/返回类型更改为“Compare”,或者将“int”值作为参数传递并在“main”函数中获取“int”值。
问题在这里:
比较 sum = n1.plus(n2);
比较 div = n1.div(n2);
方法: plus
和div
返回int
值而不是类Compare
的对象。
public int plus (int x) { return this.number + x; }
public int div (int x) { return this.number / x; }
Add getter method in Compare Class.
public int getNumber(){
return number;
}
使用下面的代码并尝试运行:
public static void main(String[] args) {
Compare sum = new Compare(9);
Compare divObj = new Compare(4);
sum.plus(n2);
divObj.div(n2);
boolean check1 = sum.isLargerThan(sum.getNumber());
boolean check2 = divObj.isLargerThan(divObj.getNumber());
boolean check3 = divObj.isEqualto(sum.getNiumber());
}
plus
和div
方法接受一个int
并返回一个int
并且您试图在Compare
对象中接收它们的输出。 此外, isLargerThan
需要一个int
而不是Compare
。
我建议您阅读简单的 Java 类并阅读教程。
为了清楚起见,我创建了一个类似于您的目标的简单类和应用程序。
package stackoverflow;
public class CompareExample {
public static void main(String[] args) {
MyNumber one = new MyNumber(1);
MyNumber two = new MyNumber(2);
MyNumber three = new MyNumber(3);
MyNumber four = new MyNumber(4);
MyNumber five = new MyNumber(5);
one.add(two);
System.out.println(one);
two.substract(three);
System.out.println(two);
int comparison = four.compareTo(five);
if(comparison > 0) {
System.out.println("gr");
}
else if(comparison < 0) {
System.out.println("ls");
}
else {
System.out.println("eq");
}
}
static class MyNumber{
private int number;
public MyNumber(int number) {
this.number = number;
}
public void add(MyNumber that) {
this.number += that.number;
}
public void substract(MyNumber that) {
this.number -= that.number;
}
public int compareTo(MyNumber that) {
return this.number - that.number;
}
@Override
public String toString() {
return "MyNumber -> Value:" + number;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.