【发布时间】:2015-12-02 03:06:38
【问题描述】:
有两个名为Array 和Fraction 的java 类。 Fraction 类用于表示两个整数的比率。有 accessor(getter) 和 mutators(setter) 方法以及其他允许用户设置分子和分母的方法。还包括一种在屏幕上将分数显示为口粮的方法(例如 5/9)。
Array 类允许用户创建 7 个分数的数组。然后程序将按升序对分数进行排序。然后丢弃最大和最小分数,并将剩余的分数加在一起。该程序应显示所有分数及其总和。总和应减至最低。
假设有7个分数,
- 6/7、2/4、3/18、1/8、10/20、2/6、3/4。
排序后
- 1/8、3/18、2/6、2/4、10/20、3/4、6/7
去除最小和最大分数,然后得到其余部分的总和
- 3/18 + 2/6 + 2/4 + 10/20 + 3/4 = 9/4
我对如何对 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;
}
}
【问题讨论】:
-
什么是
Fraction?它来自哪里? -
简而言之,选择排序就是不断迭代数据列表,从列表中取出最大的一个,将其删除并放入一个结果列表。继续这样做,直到清空原始列表。我们可以将原始列表用作“结果列表”(例如,请参见链接)。当然,为了对列表进行排序,您需要能够“比较”两个元素以查看哪个更大。其余的(弄清楚如何比较两个分数,实现排序)是您自己的工作。
-
@chatlover :您提到有 7 个分数。但是在您的示例中,有 6 个。我想 3/4 被遗漏了。并在排序后忽略最小值和最大值并得到其余部分的总和。不是吗?
-
对不起,是的!这里应该有七个。假设忽略最小值和最大值,然后从其余部分中求和。