排序分数?选择排序

时间:2015-12-02 03:06:38

标签: java arrays sorting

有两个名为ArrayFraction的java类。 Fraction类用于表示两个整数的比率。有访问器(getter)和mutator(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;
    }
}

1 个答案:

答案 0 :(得分:0)

在使用选择排序之前,您必须执行一些额外的工作,即
1.首先,尝试通过将每个分数乘以某个值来使所有分数的分母相等,即分母的LCM。
2.并使用相同的值乘以其分子部分。
3.之后,第二步你的分母是相同的,所以现在你可以在分子的基础上应用选择排序。 Ans,也可以通过除以步骤1中使用的相应常量值来重新调整值。