为什么我的交叉乘法方法检查二维数组是否在每行中都有分子和分母,但返回的不是真

时间:2018-10-04 05:42:33

标签: java debugging

我应该从一个文本文件中读取分数,并计算每个相等值的分数出现多少次。我正在完成它,但是我无法弄清楚为什么我的函数(isEqual)仅在main的if语句中调用它时才删除第一个重复项。另外,main末尾的三个print语句用于测试isEqual方法。 isEqual(1,1)应该返回true,但不会返回。

import java.util.Arrays;
import java.util.Scanner;
import java.io.*;
public class FractionsV1 {

    public static void main(String[] args) throws IOException {
        Scanner inputFile = new Scanner(new File("fractions.txt"));

        int[][] originalFractions = new int[2][fileLength()];
        int index = 0;
        while(inputFile.hasNextLine()) {
            String fraction = inputFile.nextLine();
            int numerator = getNumerator(fraction);
            int denominator = getDenominator(fraction);

            if(isEqual(originalFractions, numerator, denominator) == false) {
                originalFractions[0][index] = numerator;
                originalFractions[1][index] = denominator;
                index++;

            }





        }


    System.out.println(Arrays.toString(originalFractions[0]));
    System.out.println(Arrays.toString(originalFractions[1]));
    System.out.println(isEqual(originalFractions, 1, 1));
    System.out.println(isEqual(originalFractions, 4, 2));


    }


    public static int getNumerator(String input) {
        String[] fraction = input.split("/", 2);
        String numerator = fraction[0];
        int retVal = Integer.parseInt(numerator);

        return retVal;
    }

    public static int getDenominator(String input) {
        String[] fraction = input.split("/", 2);
        String denominator = fraction[1];
        int retVal = Integer.parseInt(denominator);

        return retVal;
    }

    public static int fileLength() throws IOException {
        Scanner inputLength = new Scanner(new File("fractions.txt"));

        int lengthOfFile = 0;
        while(inputLength.hasNextLine()) {

            String line = inputLength.nextLine();
            lengthOfFile++; 
        }

        return lengthOfFile;
    }

    public static boolean contains(int[][] input, int numerator, int denominator) {
        for(int i = 0; i < input.length; i++) {
            if (numerator == input[0][i] && denominator == input[1][i]) {
                return true;
            }
        }
        return false;
    }

    public static boolean isEqual(int[][] input, int numerator, int denominator) {
        for(int i = 0; i < input.length; i++) {
            if(crossMultiply(numerator, denominator, input[0][i], input[1][i]) == true) {
                return true;

            }
        }
        return false;


    }

    public static boolean crossMultiply(int firstNum, int firstDen, int secondNum, int secondDen) {
        if((double)firstNum * secondDen / secondNum == (double)firstDen) {
            return true;
        }
        return false;
    }

}

输出

[6,5,80,800,15,5,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2, 2,2,2,2,2,2,0,0]

[3、9、90、900、25、5、1、10、100、1000、3、6、2、3、1、4、5、6、7、8、9、2、3, 4,5,6,7,8,9,0,0]

false

true

文本文件,但是每个分数后面都有一个新行 6/3 4/2 5/9 80/90 800/900 15/25 5/5 1/1 1/10 1/100 1/1000 1/3 2/6 1/2 1/3 1/1 1/4 1/5 1/6 1/7 1/8 1/9 2/1 2/2 2/3 2/4 2/5 2/6 2/7 2/8 2/9

0 个答案:

没有答案