我应该从一个文本文件中读取分数,并计算每个相等值的分数出现多少次。我正在完成它,但是我无法弄清楚为什么我的函数(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