有两个名为Array
和Fraction
的java类。 Fraction
类用于表示两个整数的比率。有访问器(getter)和mutator(setter)方法以及允许用户设置分子和分母的其他方法。还包括一种在屏幕上显示分数的方法(例如5/9)。
Array
类允许用户创建7个分数的数组。然后程序将按升序对分数进行排序。然后丢弃最大和最小馏分,并将剩余的馏分加在一起。程序应显示所有分数及其总和。总和应减少到最低值。
假设有7个分数,
排序后
删除最小和最大分数,然后得到其余部分的总和
我对如何对Array.java
类中的“分数”进行排序感到困惑。我把它命名为选择排序。同样,我如何丢弃最低和最大的分数?
import java.io.*;
import java.util.*;
public class Array {
public static void selectionSort(Fraction[] arr)
{}
public static void setFraction(Fraction[] arr)
{
Scanner scan = new Scanner(System.in);
int i=0;
for (Fraction e : arr)
{
i++;
System.out.println("Input Numerator: " + i + " of 7");
e.setNumerator(scan.nextInt());
System.out.println("Input Denominator: " + i + " of 7");
e.setDenominator(scan.nextInt());
}
}
public static Fraction addFraction (Fraction x, Fraction y)
{
int gcd = 0;
Fraction sum = new Fraction();
gcd = x.getDenominator() * y.getDenominator();
sum = new Fraction(x.getNumerator() * y.getDenominator() +
x.getNumerator() * y.getDenominator() + y.getDenominator() * x.getNumerator(), gcd);
return sum;
}
private static final Scanner keyb = null;
public static void main(String[] args) {
Fraction fr[] = new Fraction[7];
String reduce = "";
Scanner keyb = new Scanner(System.in);
for (int i =0; i< fr.length; i++)
fr[i]=new Fraction();
Array.setFraction(fr);
Array.selectionSort(fr);
Fraction sum = Array.addFraction(fr[0], fr[1]);
for (int i =0; i <fr.length; i++) {
fr[i].display();
if(i<fr.length-1) {
System.out.print(" + ");
}
}
System.out.print(" = ");
sum.display();
}
}
以下是Fraction
:
import java.io.File;
import java.util.Scanner;
public class Fraction {
public static int length;
public int numerator = 1;
public int denominator = 1;
public int gcd;
public Fraction() {
super ();
}
public Fraction(int n, int d) {
numerator = n;
denominator = d;
}
public void display()
{
System.out.print(numerator +"/" + denominator);
}
public int getNumerator() {
return numerator;
}
public void setNumerator(int numerator) {
this.numerator = numerator;
}
public int getDenominator() {
return denominator;
}
public void setDenominator(int denominator) {
this.denominator = denominator;
}
private static int gcd(int numerator, int denominator) {
return denominator == 0 ? numerator : gcd(denominator, numerator % denominator);
}
public double decimal(double numerator, double denominator) {
return numerator / denominator;
}
public static void reduce(int numerator, int denominator) {
int gcd = gcd(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
//return (numerator / gcd) + "/" + (denominator / gcd);
}
@Override
public String toString() {
return numerator + "/" + denominator;
}
}
答案 0 :(得分:0)
在使用选择排序之前,您必须执行一些额外的工作,即
1.首先,尝试通过将每个分数乘以某个值来使所有分数的分母相等,即分母的LCM。
2.并使用相同的值乘以其分子部分。
3.之后,第二步你的分母是相同的,所以现在你可以在分子的基础上应用选择排序。 Ans,也可以通过除以步骤1中使用的相应常量值来重新调整值。