【问题标题】:Check repetition of fractions of external file检查外部文件部分的重复
【发布时间】:2014-04-11 10:07:06
【问题描述】:

我正在创建一个需要三个类的程序。程序读取一个用分数填充的外部文本文件,并返回每个分数重复了多少次。 4/2 必须减少到 2/1,对于 2/1 计数是 +1。我相信我快完成了,但我无法弄清楚我需要在 FractionCounter 类中的 compareAndIncrement() 方法中添加什么。假设用于查看传递给函数的 newFraction 是否与存储的 Fraction 相同,如果是,则将计数器加一并返回 true(否则返回 false)。以下是我的课程的代码。

分数计数器

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


public class FractionCounter {

    private Fraction theFraction;
    private int counter = 0;

    public FractionCounter(Fraction theFraction ){

    }

    public boolean compareAndIncrement(Fraction newFraction){

        return false;
    }

    public String toString(){

        return "";
    }

    public static void main(String[] args){

        ObjectList num = new ObjectList();
        ObjectList den = new ObjectList();

        Scanner fractionFile = null;

        try{
            fractionFile = new Scanner(new FileInputStream("fractions.txt"));
        }
        catch (FileNotFoundException e){
            System.out.println("File not found."); 
            System.exit(0); 
        }

        while (fractionFile.hasNextLine()){
            String[] part = (fractionFile.nextLine().split("/"));
            num.add(Integer.parseInt(part[0]));
            den.add(Integer.parseInt(part[1]));

        }   
    }
}

分数

public class Fraction {

    private int numerator;
    private int denominator;

    public Fraction() {
    }

    public Fraction(int num, int den) {
        setNumerator(num);
        setDenominator(den);
    }

    public void setNumerator(int num) { //sets numerator
        numerator = num;
    }

    public int getNumerator() { //gets numerator
        return numerator;
    }

    public void setDenominator(int den) { //sets denominator
        if(den == 0) {
            System.out.println("Error: Denominator = 0");
            System.exit(0);
        } else {
            denominator = den;
        }
    }
    public int getDenominator() { //gets denominator
        return denominator;
    }
    public boolean equals(Fraction that) { 

        return ((double)this.numerator/this.denominator) == ((double)that.numerator/that.denominator);

    }
}

对象列表

public class ObjectList {
    private int[] fraction = new int[100];
    private int numElements = 0;

    public void add(int n){
        fraction[numElements] = n;
        numElements++;
    }

    public String toString(){
        String retVal = "";
        for (int i = 0;  i < numElements; i++){
            retVal += fraction[i] + ",";
        }
        return retVal;
    }

    public int indexOf(int[] input, int target) { 
        //returns the index of the inputed value
        if(contains(input,target) == true){
            for(int i = 0;i <= target;i++) {
                if(input[i] == target) {
                    return i;
                }
            }
        }
        return -1;
    }

    public boolean contains(int[] input, int target) { 
        //is the target in the inputed array?
        for(int i=0;i<input.length; i++) {
            if(input[i] == target) {
                return true;
            }
        }
        return false;
    }



}

任何关于我需要对我的方法做些什么的提示或提示将不胜感激。如果不使用我的ObjectList 类中的numElementsfraction 变量,我想不出办法。谢谢

【问题讨论】:

    标签: java class fractions


    【解决方案1】:

    我会制作一张地图来制作柜台:

    private static final Map<Fraction, Integer> counter = new HashMap<Fraction, Integer>();
    

    对于为文件读取的每个 Fraction 元素,我会这样做:

    if(counter.containsKey(fraction)){
        Integer count = counter.get(fraction);
        count++;
        counter.put(fraction, count);
    } else {
        counter.put(fraction, 1);
    }
    

    此外,我会在 Fraction 类中创建一个静态解析函数,它会从您刚刚阅读的行中返回一个 Fraction 实例。还有一个 toString 函数可以轻松打印它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多