gpt4 book ai didi

java - 为什么 getFraction1 和 getFraction2 方法没有正确设置这些变量的值?

转载 作者:行者123 更新时间:2023-12-01 14:24:42 25 4
gpt4 key购买 nike

我尝试以这样的方式编写TestFraction,即主方法调用方法getFraction1getFraction2来创建两个分数:fr1 (a/b) 和 fr2 (a/b)。 getFraction1getFraction2 提示用户输入两个整数,ab,并调用 getNumber 捕获这些整数。然后 Fraction 对 fr1 和 fr2 执行计算。问题是,当我运行 TestFraction 时,a 和 b 的值保留为 1,这就是它们在 Fraction 中设置的值。谁能告诉我为什么 getFraction1 和 getFraction2 实际上没有将 a 和 b 的值传递给 fr1 和 fr2 吗?

这是我的 TestFraction 代码:

package Fraction;

import java.io.*;
import java.util.*;

public class TestFraction
{

static Scanner console = new Scanner (System.in);

private static int getNumber() throws InputMismatchException
{
return console.nextInt();
}

private static Fraction getFraction1()
{
int a=1, b=1;
Fraction frac = new Fraction ();

while (true) {

// prompt to enter a numerator and a denominator
System.out.println("Input 1st fraction numerator and denominator");
// input the numerator and the denominator using getNumber()
try {
a = getNumber();
b = getNumber();
}
catch (Exception e)
{
System.out.println("Exception: "+e.toString());
console.nextLine();
continue;
}
return frac;
// return new Fraction if OK
// otherwise print an error message
}
}

private static Fraction getFraction2()
{
int a=1, b=1;
Fraction frac = new Fraction ();

while (true) {

// prompt to enter a numerator and a denominator
System.out.println("Input 2nd fraction numerator and denominator");
// input the numerator and the denominator using getNumber()
try {
a = getNumber();
b = getNumber();
}

catch (Exception e)
{
System.out.println("Exception: "+e.toString());
console.nextLine();
continue;
}
return frac;
// return new Fraction if OK
// otherwise print an error message
}
}
public static void main(String[] args)
{
Fraction fr1 = new Fraction ();
fr1 = getFraction1();

Fraction fr2 = new Fraction ();
fr2 = getFraction2();

Fraction res = new Fraction();

// define other variables including res and fr2

res = Fraction.add (fr1, fr2);
System.out.println(fr1+" + "+fr2+" = "+res);

res = Fraction.subtract (fr1, fr2);
System.out.println(fr1+" - "+fr2+" = "+res);
res = Fraction.multiply (fr1, fr2);
System.out.println(fr1+" * "+fr2+" = "+res);
res = Fraction.divide (fr1, fr2);
System.out.println(fr1+" / "+fr2+" = "+res);
res = Fraction.lessThan (fr1, fr2);
System.out.println(fr1+" "+res+" "+fr2);

// test subtract, multiply, divide, lessThan methods
// each test has to print a description, a result,
// and, possibly, a error message if the calculation fails

}

}

这是分数:

package Fraction;

public class Fraction
{
protected int a;
protected int b;
public Fraction()
{
a = 1;
b = 1;
}
public Fraction (int a, int b)
{
this.a=a;
this.b=b;
}
public int getNumerator()
{
return a;
}
public int getDenominator()
{
return b;
}
public void setNumerator(int a)
{
this.a=a;
}

public void setDenominator(int b)
{
this.b=b;
}
public String toString ()
{
return a+"/"+b;
}
public int gcd(int a, int b)
{
//ToDo implement Euclide algorithm
if (b==0) return a;
return gcd(b, a%b);
}
public void lowestTerms()
{
int g=gcd(a,b);
a=a/g;
b=b/g;
}
public static Fraction add(Fraction first, Fraction second)
{
Fraction result = new Fraction();
result.setNumerator(first.getNumerator()*second.getDenominator()
+ first.getDenominator()*second.getNumerator());
result.setDenominator(first.getDenominator()*second.getDenominator());
result.lowestTerms();
return result;
}
//ToDo methods subtract, multiply, divide, lessThan
public static Fraction subtract(Fraction first, Fraction second)
{
Fraction result = new Fraction();
result.setNumerator(first.getNumerator()*second.getDenominator()
- first.getDenominator()*second.getNumerator());
result.setDenominator(first.getDenominator()*second.getDenominator());
result.lowestTerms();
return result;
}
public static Fraction multiply(Fraction first, Fraction second)
{
Fraction result = new Fraction();
result.setNumerator(first.getNumerator()*second.getNumerator());
result.setDenominator(first.getDenominator()*second.getDenominator());
result.lowestTerms();
return result;
}
public static Fraction divide(Fraction first, Fraction second)
{
Fraction result = new Fraction();
result.setNumerator(first.getNumerator()*second.getDenominator());
result.setDenominator(first.getDenominator()*second.getNumerator());
result.lowestTerms();
return result;
}
public static Fraction lessThan(Fraction first, Fraction second)
{
if (first.getNumerator()*second.getDenominator() <=
first.getDenominator()*second.getNumerator()){
return first;
}
else {
return second;
}
}
}

最佳答案

您必须使用 Faction(int, int) 构造函数而不是 Fraction() 构造函数:

Fraction frac = new Fraction ();

必须是

Fraction frac = null;
//later in the code once you have a and b variables set and no exceptions...
frac = new Fraction (a, b);

使用 setter :

frac.setNumerator(a);
frac.setDenominator(b);

在返回frac变量之前。

关于java - 为什么 getFraction1 和 getFraction2 方法没有正确设置这些变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17254100/

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