0

如果我要制作一个新程序并想要一个分数类,而我的书称之为驱动程序类,它是一个主类,我有这样的代码

// Driver class

import java.util.Scanner;

public class DriverClass{

    public static void main(String[] args){

        Scanner stdIn = new Scanner(System.in);
        Fraction c, d;

        System.out.println(" Enter a numerator then a denominator:");
        c = new Fraction( stdIn.nextInt(), stdIn.nextInt());
        c.print();

       System.out.println(" Enter a numerator then a denominator:");
        d = new Fraction( stdIn.nextInt(), stdIn.nextInt());
        d.print();
    }
}
...

在我的分数类中,我有一个称为公共分数的方法。这将如何设置来自扫描仪实用程序的驱动程序类中的分数 c 的两个数字,而且 c 值是否会被来自分数 d 的值替换?我正在上 Java 课,这是我不明白的家庭作业的一部分。我试图将这些值传递给分数类,因为最后我必须将这两个分数加在一起并将它们相乘。

// begining of class

public class Fraction{

    private int numerator;
    private int denominator;

    // well this is what my problem is, how do I call for c 
    // twice in the Fraction class
    public int Fraction(int num, int denom){

this.numerator = num;

this.denominator = denom;
}
    // is this the right way to recieve the fraction 
    // from the driver class for both c and d?

}

任何人都可以帮我解决这个问题吗

4

1 回答 1

1

您的Fraction方法是一个定义为返回 int 的方法,但您调用它时就好像它是构造函数一样。

构造函数不返回任何东西,所以不要声明任何返回类型。(它们甚至没有void类型,所以编译器知道它们是构造函数而不是方法,并且需要用new.在Java Puzzlers中就是这样做的)。

从定义中删除“ int”返回类型:

public class Fraction{

    private int numerator;
    private int denominator;

    public  Fraction(int num, int denom) {
        //...

这将如何设置来自扫描仪实用程序的驱动程序类中的分数 c 的两个数字,而且 c 值是否会被来自分数 d 的值替换?

您正在拨打 2 次电话new Fraction(..,..)。每次使用时new,它都会创建所请求类的新对象,然后使用您给它的值调用该对象上的构造函数。所以c并且d将持有对不同实例的引用Fraction。由于numerator和的denominator字段Fraction没有被标记为static,那么每个 的 实例都Fraction将拥有自己的这些字段的副本,因此传递给对象的构造函数的值将c被存储在第一个新对象中,该对象的引用将存储在变量中,而那些在d第二个新对象中。由于它们是不同的对象,因此这些值不会相互替换。

于 2009-10-03T09:59:07.713 回答