检查重复外部文件的分数

时间:2014-04-11 10:07:06

标签: java class fractions

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

FractionCounter

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



}

我非常感谢任何关于我需要对我的方法做什么的提示或提示。如果不使用numElements类中的fractionObjectList变量,我无法找到一种方法。谢谢

1 个答案:

答案 0 :(得分:0)

我会制作一张地图来制作计数器:

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函数可以轻松打印它。