Topic: 求助 一个编译出错的原因!(不兼容的类型)

  Print this page

1.求助 一个编译出错的原因!(不兼容的类型) Copy to clipboard
Posted by: zmj888
Posted on: 2005-12-04 12:36

请尽量使用准确的文字描述作为标题
(甚至只是简单的错误信息)

若新帖再無恰当标题,可能会被刪除

原來的标题:
求助一个编译出错的原因!!


大家帮忙看看编译出现这样的情况时什么原因?不胜感激

2.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: why
Posted on: 2005-12-04 17:03

Show us your Rational class.

From the error message, it doesn't have the methods you're trying to call:
Rational add(Rational r);
...
Rational divide(Rational r);

but only
void add(Rational r);
...
void divide(Rational r);

3.Rational.java [Re: zmj888] Copy to clipboard
Posted by: zmj888
Posted on: 2005-12-04 18:29

//这是我根据RatinalDemo.java设计编写的Rational类

public class Rational{
private int numerator;//两有理数的分子以及相加后的分子
private int denominator;//两有理数的分母以及相加后的分母




public void add(Rational m){
numerator=(numerator*m.getDenominator())+(denominator*m.getNumerator());//得到新的分子
denominator=denominator*m.getDenominator();//得到新的分母

}

public void subtract(Rational m){
numerator=(numerator*m.getDenominator())-(denominator*m.getNumerator());
denominator=denominator*m.getDenominator();

}

public void multiply(Rational m){
numerator=numerator*m.getNumerator();
denominator=denominator*m.getDenominator();

}

public void divide(Rational m){
numerator=numerator*m.getDenominator();
denominator=denominator*m.getNumerator();
}
public void setNumerator(int z){
numerator=z;

}
public void setDenominator(int z){
denominator=z;
}

public int getNumerator(){
return numerator;

}

public int getDenominator(){
return denominator;
}

public String toString(){
String s="numerator+\\+denominator";
return s;

}


}

4.这是书上提示要求和RationalDemo.java [Re: zmj888] Copy to clipboard
Posted by: zmj888
Posted on: 2005-12-04 18:31

书上原文如下:这个案例学习的目的是设计并实现Rational类,代表对有理数的操作。一个有理数是两个整数的比值,通常以a/b的格式表示。称a为分子(numerator),b为分母(denominator)。分母不为零。基本操作有如下定义:
加法:(a/b)+(c/d)=(ad+bc)/bd;
减法:(a/b)-(c/d)=(ad+bc)/bd;
乘法:(a/b)*(c/d)=ac/bd;
除法:(a/b)/(c/d)=ad/bc;
分析和设计:
为了表示有理,需要表示它的分子和分母。这一必要性意味着一个表示有理数的类需要至少两个实例变量:一个变量代表该对象特定的分子,另一个变量代表该对象特定的分母。
private int numerator 相关有理数的分子
private int denominator 相关有理数的分母
有理数的抽象应该至少用如下方式提供方法初始化和操作有理数对象:
默认地构造一个有理数或者有一个分子和分母指定。
计算两个有理数进行加减乘除的结果 。
产生一个能够显示到标准输出流的字符窜代表有理数。
为了支持客户活动和信息隐藏,应该也有方法实现如下活动:
访问分子或分母的值
设置分子或分母的值

为了扶助读者设计必要的信息结构和算法,提供Rational的客户程序RationalDemo.java。程序输出结果如下(没有图只好大概写一下)
Enter numerator of a rational number: 1
Enter denominator of a rational number:2

Enter numerator of a rational number: 1
Enter denominator of a rational number:3

For r=1/2 and s=1/3

r+s=5/6
r-s=1/6
r*s=1/6
r/s=3/2

以下是书中提供的RationalDemo.java代码

import java.io.*;
public class RationalDemo {
public static void main(String args[]) throws IOException {
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
System.out.println();

//获得有理数r和s的值
Rational r=new Rational();
System.out.print("Enter numerator of a rational number: ");
int a=Integer.parseInt(stdin.readLine());
System.out.print("Enter denominator of a rational number: ");
int b=Integer.parseInt(stdin.readLine());
r.setNumerator( a );
r.setDenominator( b );
System.out.println();
System.out.println();

Rational s=new Rational();
System.out.print("Enter numerator of a rational number: ");
int c=Integer.parseInt(stdin.readLine());
System.out.print("Enter denominator of a rational number: ");
int d=Integer.parseInt(stdin.readLine());
s.setNumerator( c );
s.setDenominator( d );

//在r和s上进行操作
Rational sum=r.add( s );//把两有理数相加的结果作为一个Rational对象,为了能调用toString方法
Rational difference=r.subtract( s) ;
Rational product=r.multiply( s );
Rational quotient=r.divide( s );

System.out.println("For r="+r.toString()+" s="+s.toString());
System.out.println("r+s="+sum.toString());
System.out.println("r-s="+difference.toString());
System.out.println("r*s="+product.toString());
System.out.println("r/s="+quotient.toString());

System.out.println();

}
}

5.Re:这是书上提示要求和RationalDemo.java [Re: zmj888] Copy to clipboard
Posted by: why
Posted on: 2005-12-04 18:54

Rational sum=r.add( s );

You need to return a Rational, NOT void!
Why would you write
public void add(Rational m){
numerator=(numerator*m.getDenominator())+(denominator*m.getNumerator());//得到新的分子
denominator=denominator*m.getDenominator();//得到新的分母
}

instead of
public Rational add(Rational m) {
numerator=(numerator*m.getDenominator())+(denominator*m.getNumerator());
denominator=denominator*m.getDenominator();

return new Rational(numerator, denominator);
}


(You could ignore the comment beneath.)
But I would prefer an immutable version:

public class Rational {
private final int numerator;
private final int denominator;

public Rational(int n, int d) {
numerator = n;
denominator= r;
}

...

public Rational add(Rational s) {
int n = (this.numerator * s.denominator) + (this.denominator * s.numerator);
int d = this.denominator * s.denominator;
return new Rational(n, d);
}

...
}

6.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: zmj888
Posted on: 2005-12-04 19:00

有点理解不了

7.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: why
Posted on: 2005-12-04 19:09

zmj888 wrote:
有点理解不了

Rational sum=r.add( s );

You need to return a Rational, NOT void!


這様也理解不了
那麼閣下應該好好再讀讀基礎書,明白void的意思
恕敝人愛莫能助矣

8.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: zmj888
Posted on: 2005-12-04 19:18

我知道void的用法,我只是对方法的调用有点搞不清

9.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: why
Posted on: 2005-12-04 19:21

zmj888 wrote:
我知道void的用法,我只是对方法的调用有点搞不清

Dead敝人搞不清閣下对甚麼搞不清

如果閣下知道void的用法
就不會在要求Rational return type時給它一個void method

10.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: zmj888
Posted on: 2005-12-04 19:22

我才刚刚学

11.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: why
Posted on: 2005-12-04 19:25

zmj888 wrote:
我才刚刚学

那麼請好好仔細讀讀書,
不要隨便説:我知道void的用法

12.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: zmj888
Posted on: 2005-12-04 19:25

我想通了一点,我要用的是计算后的分子分母,而我没返回,所以就无效,是不是

13.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: why
Posted on: 2005-12-04 19:31

zmj888 wrote:
我想通了一点,我要用的是计算后的分子分母,而我没返回,所以就无效,是不是

要返回的是一個Rational object
而閣下卻只寫(抄考)了一個void method.

請恕敝人無暇再跟閣下聊下去了,祝編程愉快Smile

14.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: zmj888
Posted on: 2005-12-04 19:54

thanks for your help

15.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: 真空龙卷风
Posted on: 2005-12-06 01:55

WHY is a superman!

16.Re:求助 一个编译出错的原因!(不兼容的类型) [Re: zmj888] Copy to clipboard
Posted by: Pink
Posted on: 2005-12-09 00:21

楼主不应该啊,why脾气够好,赞一个


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923