实验二
(1)有理数四则运算
编写一个Java应用程序,实现两个有理数的四则运算,要求操作数用分子和分母的形式表示。结果要求最简形式,用“分子/分母”的形式表示、如果分母为1,则结果以整数表示。
package AVE;
interface Averages{
float average(int[] array);
}
class First implements Averages
{
public float average(int[] array) {
int idx = 0;
float ans = 0;
for(int i :array)
{
ans +=i;
idx++;
}
ans/=idx;
return ans;
}
}
class Second implements Averages
{
public float average(int[] array) {
int idx = 0;
float ans = 0;
float maxs = -0x3f3f3f3f;
float mins = 0x3f3f3f3f;
for(int i :array)
{
if(i > maxs) maxs = i;
if(mins > i) mins = i;
ans +=i;
idx++;
}
idx-=2;
ans -= maxs;
ans -= mins;
ans/=idx;
return ans;
}
}
public class Average {
public static void main(String[] args)
{
First first = new First();
Second second = new Second();
int[] arry = {1,3,6,9,8,55,11,22,111,888};
System.out.println("数组内容是:");
for(int i:arry) System.out.print(i+" ");
System.out.println();
float an1 = first.average(arry);
float an2 = second.average(arry);
System.out.print("First 计算的平均值是:" + an1 + " Second 计算的平均值是:" + an2);
}
}
(2)表演最终得分
声明一个Average接口,其中约定求平均值的方法(参数为一个数组);声明First、Second 类实现Average接口,分别给出求平均值的方法实现。
A.类First中的功能为全部数值相加后求平均值。
B.类Second中的功能为去掉一个最高分和- 一个最低分,再将总分求平均值。
package cls;
import java.util.Scanner;
class Four
{
public String s1,s2;
private int x1,y1,x2,y2;
public int gcd(int a, int b) {return b!=0 ? gcd(b, a % b) : a; }
void Mul()
{
int an1 = x1*x2;
int an2 = y1*y2;
int rt = gcd(an1,an2);
an1/=rt;
an2/=rt;
if(an1 <0) {
an1 = -an1;
an2 = -an2;
}
if(an1 == 1) System.out.println("乘法结果为:" + an2);
else System.out.println("乘法结果为:" + an2 + "/" + an1 );
}
void Add()
{
int an1 = x1*x2;
int an2 = y1*x2 + y2*x1;
int rt = gcd(an1,an2);
an1/=rt;
an2/=rt;
if(an1 <0) {
an1 = -an1;
an2 = -an2;
}
if(an1 == 1) System.out.println("加法结果为:" + an2);
else System.out.println("加法结果为:" + an2 + "/" + an1 );
}
void Sub()
{
int an1 = x1*x2;
int an2 = y1*x2 - y2*x1;
int rt = gcd(an1,an2);
an1/=rt;
an2/=rt;
if(an1 <0) {
an1 = -an1;
an2 = -an2;
}
if(an1 == 1) System.out.println("减法结果为:" + an2);
else System.out.println("减法结果为:" + an2 + "/" + an1 );
}
void Div()
{
int an1 = x1*y2;
int an2 = y1*x2;
int rt = gcd(an1,an2);
an1/=rt;
an2/=rt;
if(an1 <0) {
an1 = -an1;
an2 = -an2;
}
if(an1 == 1) System.out.println("除法结果为:" + an2);
else System.out.println("除法结果为:" + an2 + "/" + an1 );
}
void changes()
{
int len = s1.length();
int len2 = s2.length();
int [] s = new int [6];
int idx = 0;
boolean t1 = false;
for(int i = 0 ; i < len ; i ++ )
{
if(s1.charAt(i) == '/')
{
if(t1) s[idx] = -s[idx];
s[idx]/=10;
idx++;
t1 = false;
continue;
}
if(s1.charAt(i) == '-')
{
t1 = true;
continue;
}
s[idx] += s1.charAt(i) - '0';
s[idx]*=10;
}
s[idx]/=10;
if(t1)s[idx] = -s[idx];
idx++;
t1 = false;
for(int i = 0 ; i < len2 ; i ++ )
{
if(s2.charAt(i) == '/')
{
if(t1) s[idx] = -s[idx];
s[idx]/=10;
idx++;
t1 = false;
continue;
}
if(s2.charAt(i) == '-')
{
t1 = true;
continue;
}
s[idx] += s2.charAt(i) - '0';
s[idx]*=10;
}
s[idx]/=10;
if(t1)s[idx] = -s[idx];
y1 = s[0];
x1 = s[1];
y2 = s[2];
x2 = s[3];
try {
int check = y1/x1;
int check2 = y2/x2;
}catch(Exception e) {
System.out.println("捕获的异常信息为:" + e.getMessage());
return;
}
Mul();
Add();
Sub();
Div();
}
}
public class cls {
public static void main(String[] args)
{
Four ans = new Four();
Scanner t = new Scanner(System.in);
System.out.println("输入第一个数字,格式为 数字/数字,输入后请回车");
ans.s1 = t.nextLine();
System.out.println("输入第二个数字,格式为 数字/数字,输入后请回车");
ans.s2 = t.nextLine();
ans.changes();
t.close();
}
}