当前位置: 首页 > 知识库问答 >
问题:

7个分数按数组排序,加在一起,然后减少。在java中

毋宪
2023-03-14

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

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

分数类应包含以下内容:

  • 用于存储分子、分母和ratio\u值的私有实例变量

创建一个测试程序,允许用户创建7个分数的数组。然后程序将按升序对分数进行排序。最高和最低的分数被扔掉,其余的分数相加。程序应显示所有分数及其总和。总和应减少到最低项并显示在屏幕上。例如,如果总和为20/60,则程序应显示1/3。

在测试程序中编写一个排序方法,对分数数组进行排序并计算总和。

假设您有以下7个分数:6/7, 2/4, 3/4, 3/18, 1/8, 10/20, 2/6,那么丢弃最低和最大分数后的输出html" target="_blank">示例将是:

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

我完全不知道该如何解决这个问题,我陷入了困境。下面是我的课程和。主文件。我试过用“//”注释一些不同的东西,很抱歉代码太长。

    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;
        }


    }

}

这是我的分数课

package homework_5;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Fraction {
    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 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 String reduce(int numerator, int denominator) {
        int gcd = gcd(numerator, denominator);
        return (numerator / gcd) + "/" + (denominator / gcd);
    }


    @Override
    public String toString() {
        return numerator + "/" + denominator;
    }


}

到目前为止,我所能做的就是打印出7个分数从一个. txt文件格式像:6 7 2 4 3 4 3 18 1 8 10 20 2 6但我想有一个文本文件格式像:6/7 2/4 3/4 3/18 1/8 10/20 2/6我不知道如何让分隔符读取'/'和'。

谢谢你的任何帮助。

共有2个答案

柴瀚昂
2023-03-14

感谢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("[/ | *]");
常永怡
2023-03-14

从java文档中,您可以将想要的分隔符作为正则表达式方法链到Scanner的构造函数中。

您需要空格或符号,这样应该可以。未经测试,您可能必须更改正则表达式。如果您这样做了,只需在线使用regex计算器就可以正确地修复它。

Scanner keyb = new Scanner(new FileInputStream(new File("fractions")).useDelimiter("[/ | \s*]");
 类似资料:
  • 这就是我的问题。我需要帮助,试图找出我做错了什么,并从那里开始。我需要创建一个运行这些指令的程序。 创建名为Fraction的java类。该类用于表示两个整数的比率。包括允许用户设置分子和分母的突变体方法。还包括在屏幕上显示分数作为配给(例如5/9)的方法。此方法不需要将分数降低到最低项。 分数类应包含以下内容: •用于存储分子、分母和比值的私有实例变量。 •设置所有实例变量的构造函数。 •获取和

  • 问题内容: 我有一个带有数字值的字符串键数组,可用于具有每个标签出现次数的标签列表中,因此: 这是为了我可以按降序显示标签列表,因此: 我可以使用 arsort 通过出色的值进行反向排序,但是我还希望具有相同数字值的所有标签都按字母顺序排序,因此最终结果可以是: 有办法可以做到吗?我猜想 usort 可能是要走的路,但是我看了php.net上的示例,我的眼睛呆呆了!非常感谢!!! 问题答案: 看一

  • 我在Java中有一个数组,其中包含一组随机日期: {2015年1月20日、2015年2月12日、2015年2月20日、2015年6月21日、2015年7月12日、2015年7月28日、2015年7月30日、2015年9月24日、2015年12月31日} 如何按月将此阵列拆分为多个阵列? 我想要 {2015年1月20日}、{2015年2月12日、2015年2月20日}、{2015年6月21日}、{2

  • 要按升序对其进行int排序,我可以使用: 我怎样才能按照递减的顺序来做呢?

  • 对于一项作业,我必须要求学生人数。提示用户输入学生的lastname和分数,然后按降序对分数排序并显示。我已经做了所有这些,但不知道如何排序的名字,如果他们有相同的分数。 约翰33岁 亚当33 菲尔22 我无法得到所需的输出。我通常能解决这类问题,但这个问题让我分崩离析…请救命!

  • 但是,此修复: 有没有更优雅的方式这样做?