Передача значений в класс дроби в Java - PullRequest
0 голосов
/ 03 октября 2009

Если бы я должен был создать новую программу и хотел иметь класс дроби и то, что в моей книге называется классом драйверов, который является основным классом, и у меня есть такой код

// 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?

}

Может ли кто-нибудь помочь мне с этим

1 Ответ

1 голос
/ 03 октября 2009

Ваш Fraction метод - это метод, который определен для возврата типа int, но вы вызываете его так, как если бы он был конструктором.

Конструкторы ничего не возвращают, поэтому не объявляют тип возвращаемого значения. (у них даже нет типа void, поэтому компилятор знает, что они являются конструкторами, а не методами, и их нужно вызывать с помощью new. Это небольшая ошибка, поскольку Java позволяет объявлять методы с тем же именем, что и класс , IIRC одна из головоломок в Java Puzzlers делает это).

Удалите тип возврата "int" из определения:

public class Fraction{

    private int numerator;
    private int denominator;

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

Как это будет устанавливать оба числа из дроби c в классе драйверов, которые поступают из утилиты сканера, а также, если бы значения c были заменены значениями, поступающими из дроби d?

Вы делаете два звонка на new Fraction(..,..). Каждый раз, когда вы используете new, он создает новый объект запрошенного класса и затем вызывает конструктор для этого объекта со значениями, которые вы ему задаете. Таким образом, c и d будут содержать ссылки на различные экземпляры Fraction. Поскольку поля numerator и denominator Fraction не помечены как static, то каждый экземпляр Fraction будет иметь свою собственную копию этих полей, поэтому значения передаются в конструктор объекта, ссылка на который будут храниться в переменной c, сохраняются в первом новом объекте, а переменные d - во втором новом объекте. Поскольку это разные объекты, значения не заменят друг друга.

...