gpt4 book ai didi

java - 关于 Java 中的多个构造函数

转载 作者:行者123 更新时间:2023-11-29 06:33:17 25 4
gpt4 key购买 nike

我对 Java 中构造函数的多个实例有疑问。

我的任务是接收两个分数,然后对这些分数进行乘除。

我不确定如何为类对象本身的实例设置单独的值。

这是我遇到问题的示例代码:

import java.util.Scanner;

public class TextLab05
{
static int num1, den1; // numerator and denominator of the 1st rational number
static int num2, den2; // numerator and denominator of the 2nd rational number

public static void main (String args[])
{
enterData();

Rational r1 = new Rational(num1,den1);
Rational r2 = new Rational(num2,den2);
}
}

class Rational
{

private int firstNum; // entered numerator
private int firstDen; // entered denominator
private int num; // reduced numerator
private int den; // reduced denominator

public Rational()
{

}

public Rational(int n, int d)
{
n = TextLab05.num1;
d = TextLab05.den1;
//Here specifically is where I am having comprehension issues. How can I include num2 and den2 if I only have int n and int d?
}
}

如果脱离上下文很难理解,这里是我得到的完整起始代码:

import java.util.Scanner;

public class TextLab05
{
static int num1, den1; // numerator and denominator of the 1st rational number
static int num2, den2; // numerator and denominator of the 2nd rational number

public static void main (String args[])
{
enterData();

Rational r1 = new Rational(num1,den1);
Rational r2 = new Rational(num2,den2);
Rational r3 = new Rational();

r3.multiply(r1,r2);
System.out.println("\n\n" + r1.getOriginal() + " * " + r2.getOriginal() + " = " + r3.getRational());
r3.divide(r1,r2);
System.out.println("\n" + r1.getOriginal() + " / " + r2.getOriginal() + " = " + r3.getRational());

// 100 Point Version Only
// r3.add(r1,r2);
// System.out.println("\n" + r1.getOriginal() + " + " + r2.getOriginal() + " = " + r3.getRational());
// r3.subtract(r1,r2);
// System.out.println("\n" + r1.getOriginal() + " - " + r2.getOriginal() + " = " + r3.getRational());
System.out.println();
}

public static void enterData()
{
Scanner input = new Scanner(System.in);
System.out.print("\nEnter the 1st numerator ----> ");
num1 = input.nextInt();
System.out.print("\nEnter the 1st denominator --> ");
den1 = input.nextInt();
System.out.print("\nEnter the 2nd numerator ----> ");
num2 = input.nextInt();
System.out.print("\nEnter the 2nd denominator --> ");
den2 = input.nextInt();
}
}

class Rational
{

private int firstNum; // entered numerator
private int firstDen; // entered denominator
private int num; // reduced numerator
private int den; // reduced denominator

public Rational()
{

}

public Rational(int n, int d)
{
n = TextLab05.num1;
d = TextLab05.den1;
}

private int getGCF(int n1,int n2)
{
int rem = 0;
int gcf = 0;
do
{
rem = n1 % n2;
if (rem == 0)
gcf = n2;
else
{
n1 = n2;
n2 = rem;
}
}
while (rem != 0);
return gcf;
}

public int getNum()
{
return TextLab05.num1;
}

public int getDen()
{
return TextLab05.den1;
}

public double getDecimal()
{
return (double)TextLab05.num1 / TextLab05.den1;
}

public String getRational()
{
String rational = "" + TextLab05.num1 + "/" + TextLab05.den1;
return rational;
}

public String getOriginal()
{
String original = "" + TextLab05.num1 + "/" + TextLab05.den1;
return original;
}

public void reduce()
{

}
public void multiply(Rational r1, Rational r2)
{

}
public void divide(Rational r1, Rational r2)
{

}
public void add(Rational r1, Rational r2)
{

}
public void subtract(Rational r1, Rational r2)
{

}
}

最佳答案

当你打电话时:

Rational r1 = new Rational(num1, den1);
Rational r2 = new Rational(num2, den2);

在程序的主要方法中,您正在创建 Rational 类的两个实例,一个名为 r1,一个名为 r2。因为您将 int 值传递给 Rational 构造函数,所以将调用的构造函数是需要两个整数参数的构造函数:

public Rational(int n, int d)
{
...
}

编译器知道这一点,因为它匹配构造函数的名称​​以及传递的参数类型(称为匹配构造函数的“签名”)。

在您提供的代码中,Rational Constructor 代码没有任何意义 - 这段代码:

public Rational(int n, int d)
{
n = TextLab05.num1;
d = TextLab05.den1;
}

应该看起来像这样:

public Rational(int n, int d)
{
this.firstNum = n;
this.firstDen = d;
}

值 n 和 d 被传递给构造函数,然后在构造函数的主体中实例变量 firstNum 和 firstDen (它们在 Rational 类的私有(private)部分中声明并且有效地“属于”正在创建的实例) 然后将被初始化为 n 和 d 的值。

在 Rational 类主体中的任何地方,您都应该引用成员变量 firstNumfirstDen,而不是不“属于”类实例的变量。

关于java - 关于 Java 中的多个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27140383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com