此文章仅作为自己学习过程中的记录,内容如有错漏请多指教,谢谢!
第一周 “类与对象”:
- 题目内容:
设计一个表示分数的类 Fraction。这个类用两个int类型的变量分别表示分子和分母。
这个类的构造函数是:
Fraction(int a, int b):构造一个a/b的分数。
这个类要提供以下的功能:
double toDouble():将分数转换为double
Fraction plus(Fraction r):将自己的分数和r的分数相加,产生一个新的Fraction的对象。
Fraction multiply(Fraction r):将自己的分数和r的分数相乘,产生一个新的Fraction的对象。
void print():将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。
当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。
(注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。)
你写的类要和以下的代码放在一起,并请勿修改这个代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Fraction a = new Fraction(in.nextInt(), in.nextInt());
Fraction b = new Fraction(in.nextInt(),in.nextInt());
a.print();
b.print();
a.plus(b).print();
a.multiply(b).plus(new Fraction(5,6)).print();
a.print();
b.print();
in.close();
}
}
注意,你的类的定义应该这样开始:
class Fraction {
也就是说,在你的类的class前面不要有public。
- 第一周答:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Fraction a = new Fraction(in.nextInt(), in.nextInt());
Fraction b = new Fraction(in.nextInt(),in.nextInt());
a.print();
b.print();
a.plus(b).print();
a.multiply(b).plus(new Fraction(5,6)).print();
a.print();
b.print();
in.close();
}
}
class Fraction{
int nume; //成员变量:分子。
int deno; //成员变量:分母。
Fraction(int nume, int deno)
{
this.nume = nume;
this.deno = deno;
}
double toDouble() //将分数转换为double。
{
return (double)(nume/deno);
}
Fraction plus(Fraction r) //将自己的分数和r的分数相加,产生一个新的Fraction的对象。
{
Fraction ret = new Fraction(0,1);
ret.nume = nume*r.deno+deno*r.nume;
ret.deno = deno*r.deno;
return ret;
}
Fraction multiply(Fraction r) //将自己的分数和r的分数相乘,产生一个新的Fraction的对象。
{
Fraction ret = new Fraction(0,1);
ret.nume = nume*r.nume;
ret.deno = deno*r.deno;
return ret;
}
void print() //将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。
{
int temp;
int nume = this.nume;
int deno = this.deno;
while( deno!=0 ) //求分子分母的最大公约数。
{
temp = nume%deno;
nume = deno;
deno = temp;
}
this.nume/=nume; //约分过程。
this.deno