Java中的OOP:构造函数和方法的问题
我是Java新手,我正在尝试用构造函数和方法编写一个类,该类可以对两个数字进行加法和除法,还可以比较一个对象是否大于或等于另一个对象。但是我得到了一个错误:Java中的OOP:构造函数和方法的问题,java,oop,methods,constructor,Java,Oop,Methods,Constructor,我是Java新手,我正在尝试用构造函数和方法编写一个类,该类可以对两个数字进行加法和除法,还可以比较一个对象是否大于或等于另一个对象。但是我得到了一个错误:类型比较中的方法plus(int)不适用于参数(Compare)。怎么了 代码如下: public class Compare { // fields private int number; private int plus; private double div; // constructor
类型比较中的方法plus(int)不适用于参数(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);
}
}
要求使用比较构造函数创建sum和div对象,该构造函数将等于n1加n2,并使用加号方法或除法(如适用)。这里的问题是针对“Compare”类中的“plus”、“div”、“isLargerThan”和“isEqualTo”方法。参数/返回类型为“int”。但在“main”函数中,您传递的是对象,期望的是“Compare”类型的对象
要解决此问题,请将“Compare”类中那些方法的参数/返回类型更改为“Compare”,或者将“int”值作为参数传递,并在“main”函数中获取“int”值 问题在于:
比较总和=n1加上(n2)
比较div=n1.div(n2)
方法:plus
和div
返回int
值不是类对象Compare
公共整数加(整数x){
返回这个.number+x;
}
公共内部分区(内部x){
返回此.number/x;
}
使用以下代码并尝试运行:
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());
}
这里可能需要一个新的比较,包含总和
public Compare plus (int x) {
return new Compare(number + x);
}
public Compare plus (Compare x) {
return new Compare(number + x.number);
}
这也意味着需要一个比较对象,而不是如图所示的int
有了它,Compare
将变得不可变,这是非常好的,因为您可以毫无问题地共享不同变量中的对象(更改一个变量的值更改其他变量的值)
plus
和div
方法获取int
并返回int
,您试图在Compare
对象中接收它们的输出。另外,isLargerThan
取int
而不是比较
我建议您阅读简单的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;
}
}
}
包堆栈溢出;
公共类比较示例{
公共静态void main(字符串[]args){
MyNumber 1=新的MyNumber(1);
MyNumber 2=新的MyNumber(2);
MyNumber 3=新的MyNumber(3);
MyNumber 4=新的MyNumber(4);
MyNumber 5=新的MyNumber(5);
一.增加(二);
系统输出打印项次(一);
二、减(三);
System.out.println(两个);
整数比较=四。比较到(五);
如果(比较>0){
系统输出打印项次(“gr”);
}
否则如果(比较<0){
系统输出打印项次(“ls”);
}
否则{
系统输出打印项次(“eq”);
}
}
静态类MyNumber{
私有整数;
公共MyNumber(整数){
这个数字=数字;
}
公共作废添加(我的编号){
this.number+=that.number;
}
公共无效减记(我的编号){
this.number-=that.number;
}
公共整数比较(我的编号){
返回this.number-that.number;
}
@凌驾
公共字符串toString(){
返回“MyNumber->Value:”+number;
}
}
}
布尔校验1=sum.isLargerThan(n1)代码>,n1的类型是什么?通过定义公共布尔isLargerThan(int x)您期望得到什么{
?n1必须通过比较初始化。这样方法才能应用于它。方法public boolean islarger大于应用于n1,以便与n2或通过比较初始化的任何对象进行比较。SMA的意思是,您声明方法采用整数
,但您将比较
传递给它。您期望得到什么当您这样做时,编译器要做什么?我添加了一个toString
方法,在执行System.out.println(n1);
否则将使用父类Object.toString()
来打印内存中对象的类名+'@'加上“地址”。
@Override
public String toString() {
return Integer.toString(number);
}
public int intValue() {
return number;
}
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;
}
}
}