Сравнение двух разных строковых элементов одного и того же многомерного массива в Java
В настоящее время я отвечаю на практический вопрос для предстоящего практического экзамена и застрял. Я написал метод проверки того, является ли набор из трех карт действительным или недействительным, где нам говорят, что «Две карты различны, если они не имеют одинаковой формы, цвета или рисунка, то есть ни один из их атрибутов не совпадает. Две карты одинаковы, если они имеют одинаковую форму, цвет и узор, т. е. все их атрибуты совпадают. Набор из трех карт действителен, если он состоит из (i) трех разных карт или (ii) трех одинаковых карт.". В настоящее время, если я запускаю свою программу, каждый набор из трех карточек оценивается как «действительный». Я почти уверен, что проблема заключается не в том, как я считываю и сохраняю карточки и их атрибуты, потому что я это отладил, поэтому предполагаю, что проблема заключается в моей логике для моего метода cardAreValid, а конкретно в том, как Я сравниваю различные строковые элементы (атрибуты) для каждой карточки. Однако я могу ошибаться. Пожалуйста помоги.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Check {
public static boolean cardsAreValid(String [][] threeCards){
boolean sameShape = threeCards[0][0].equals(threeCards[1][0]) && threeCards[1][0].equals(threeCards[2][0]);
boolean sameColour = threeCards[0][1].equals(threeCards[1][1]) && threeCards[1][1].equals(threeCards[2][1]);
boolean samePattern = threeCards[0][2].equals(threeCards[1][2]) && threeCards[1][2].equals(threeCards[2][2]);
if (sameShape == true && sameColour==true && samePattern==true) // if all attributes match - same so valid
return true;
else if (sameShape==false && sameColour==false && samePattern==false) // if no attributes match - distinct so valid
return true;
else
return false; // if only 1 or 2 cards differ/match its invalid
}
public static void main (String [] args) {
File inFile = new File("cards.txt");
String [][] cards = new String[3][3];
List<String> allLines = new ArrayList<>();
try (Scanner sc = new Scanner(inFile)) {
while (sc.hasNextLine()) {
allLines.add(sc.nextLine());
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 0; i < allLines.size(); i++) {
String fullLine = allLines.get(i);
System.out.println("Processing: " + fullLine);
String [] singleCard = fullLine.split(" ");
for (int j = 0; j < 3; j++) {
int firstComma = singleCard[j].indexOf(",", 0);
int secondComma = singleCard[j].indexOf(",", firstComma+1);
String shape = singleCard[j].substring(0, firstComma);
String colour = singleCard[j].substring(firstComma+1, secondComma);
String pattern = singleCard[j].substring(secondComma+1);
cards[j][0] = shape;
cards[j][1] = colour;
cards[j][2] = pattern;
}
if (cardsAreValid(cards) == true) {
System.out.println("Valid");
}
else
System.out.println("Invalid");
}
}
}
На всякий случай пример текстового файла card.txt выглядит следующим образом:
квадрат,синий,круг,красный,сплошной треугольник,зеленый,полосатый
квадрат,синий,круг,красный,сплошной треугольник,
зеленый,сплошной квадрат,синий,квадрат,синий,квадрат,синий,квадрат,синий,пятно
квадрат, синий, пятно, треугольник, зеленый, полоса