Java 按数组排序的7个分数,加在一起,然后减少。在爪哇

Java 按数组排序的7个分数,加在一起,然后减少。在爪哇,java,arrays,class,sorting,fractions,Java,Arrays,Class,Sorting,Fractions,这是我的问题,我需要创建一个运行以下指令的程序 创建名为Fraction的java类。此类用于表示 两个整数的比率。包括允许用户 设置分子和分母。还包括一个 在屏幕上以定量的形式显示分数(例如5/9)。这种方法 不需要将分数减少到最低项 分数类应包含以下内容: 用于存储分子、分母和比值的私有实例变量 设置所有实例变量的构造函数 获取和设置实例变量的公共方法 名为reduce()的公共方法,返回分数的最低项 一个名为toString()的公共方法,它返回一个字符串,该字符串包含作为比率的分数 一

这是我的问题,我需要创建一个运行以下指令的程序

创建名为Fraction的java类。此类用于表示 两个整数的比率。包括允许用户 设置分子和分母。还包括一个 在屏幕上以定量的形式显示分数(例如5/9)。这种方法 不需要将分数减少到最低项

分数类应包含以下内容:

  • 用于存储分子、分母和比值的私有实例变量
  • 设置所有实例变量的构造函数
  • 获取和设置实例变量的公共方法
  • 名为reduce()的公共方法,返回分数的最低项
  • 一个名为toString()的公共方法,它返回一个字符串,该字符串包含作为比率的分数
  • 一个私有方法名gcd(),返回两个整数的最大公约数
创建一个测试程序,允许用户创建7的数组 分数。然后程序将按升序对分数进行排序。 最高和最低的部分被扔掉,剩下的部分被扔掉 分数相加。程序应显示所有 分数及其和。金额应减少至最低金额,并 显示在屏幕上。例如,如果总和为20/60,则程序 应显示1/3

在测试程序中编写排序方法,对分数数组进行排序 然后计算总数

假设你有以下7个分数:6/7,2/4,3/4,3/18,1/8, 10/20,2/6,然后一个例子输出后扔掉 最低和最大分数分别为:

3/18+2/6+2/4+10/20+3/4=9/4

我完全不知道如何解决这一问题,并陷入了困境。下面是我的类和.main文件的副本。我有一些不同的东西,我试过用“/”注释出来,很抱歉代码太长

    package homework_5;

import java.io.*;
import java.util.*;
import java.util.regex.Pattern;

public class Arrays_hw5 {

    private static final Scanner keyb = null;
    public static void main(String[] args) {

        Fraction [] fr = new Fraction[7];
//      Fraction fr1 = new Fraction();
//      Fraction fr2 = new Fraction();
//      Fraction fr3 = new Fraction();
//      Fraction fr4 = new Fraction();
//      Fraction fr5 = new Fraction();
//      Fraction fr6 = new Fraction();
//      Fraction fr7 = new Fraction();
        String reduce = "";
        int numerator = 0, denominator = 0;

        Scanner keyb = null;
        FileInputStream fis = null;
//      Scanner keyb = new Scanner(System.in);  

        try {
            fis = new FileInputStream(new File("fractions"));
            keyb = new Scanner(fis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }


//      keyb.useDelimiter("/");
//      keyb.useDelimiter(" ");
//      fr1.setNumerator(keyb.nextInt());
//      fr1.setDenominator(keyb.nextInt());
//      System.out.println(fr1);
//      fr2.setNumerator(keyb.nextInt());
//      fr2.setDenominator(keyb.nextInt());
//      System.out.println(fr2);
//      fr3.setNumerator(keyb.nextInt());
//      fr3.setDenominator(keyb.nextInt());
//      System.out.println(fr3);
//      fr4.setNumerator(keyb.nextInt());
//      fr4.setDenominator(keyb.nextInt());
//      System.out.println(fr4);
//      fr5.setNumerator(keyb.nextInt());
//      fr5.setDenominator(keyb.nextInt());
//      System.out.println(fr5);
//      fr6.setNumerator(keyb.nextInt());
//      fr6.setDenominator(keyb.nextInt());
//      System.out.println(fr6);
//      fr7.setNumerator(keyb.nextInt());
//      fr7.setDenominator(keyb.nextInt());
//      System.out.println(fr7);



        for (int i = 0; i < fr.length; i++)
        {
            //System.out.println("Enter numerator then denominator, hit enter after each entry: ");
            fr[i] = new Fraction(i, i);
            fr[i].setNumerator(keyb.nextInt());
            fr[i].setDenominator(keyb.nextInt());
            System.out.print(fr[i] + "  "); 
            //System.out.print(fr[i].decimal(numerator, denominator));
        }

//          Arrays.sort(fr);

//          for (int i = 0; i < fr.length; i++)
//              System.out.println(fr[i].decimal(numerator, denominator));

//      Fraction [] frac = {fr[1], fr[2], fr[3], fr[4], fr[5], fr[6], fr[7]};
//      Arrays.sort(frac);
//      for (int i = 0; i < 7; i++)
//          System.out.println(frac[i]);

    }
    public static void selectionSort(int[]arr)          //sorting array 
    {
        int smallest = 0;
        for (int outer = 0; outer < arr.length - 1; outer++)
        {
            smallest = outer;
            for(int inner = outer + 1; inner < arr.length; inner++)
            {
                if (arr[inner] < arr[smallest])
                    smallest = inner;
            }
            int v = arr[outer];
            arr[outer] = arr[smallest];
            arr[smallest] = v;
        }


    }

}
到目前为止,我所能做的就是从一个.txt文件中打印出7个分数,格式如下:67244311881010026 但是我想要一个文本文件,格式如下:6/7 2/4 3/4 3/18 1/8 10/20 2/6 我不知道如何让除沫器读取“/”和“”

感谢您的帮助。

从方法中,您可以将所需的分隔符作为正则表达式链接到Scanner的构造函数中

您需要空白或
/
符号,因此类似的东西应该可以工作。未经测试,您可能必须更改正则表达式。如果你这样做了,只需在线使用正则表达式计算器来正确地修复它

Scanner keyb = new Scanner(new FileInputStream(new File("fractions")).useDelimiter("[/ | \s*]");

感谢Ron提供的提示,通过使用以下代码,我让程序读取了“/”和“”:现在我只需要弄清楚如何排序、添加和执行其余步骤

Scanner keyb = null;
        FileInputStream fis = null;
//      Scanner keyb = new Scanner(System.in);  

        try {
            fis = new FileInputStream(new File("fractions"));
            keyb = new Scanner(fis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }


        keyb.useDelimiter("[/ | *]");

我的建议是:从定义读取文件中的一个分数开始。然后做N次。
Scanner keyb = null;
        FileInputStream fis = null;
//      Scanner keyb = new Scanner(System.in);  

        try {
            fis = new FileInputStream(new File("fractions"));
            keyb = new Scanner(fis);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }


        keyb.useDelimiter("[/ | *]");