提问人:koder 提问时间:10/22/2023 最后编辑:koder 更新时间:10/22/2023 访问量:43
在 Java 中比较同一多维数组的两个不同字符串元素
Comparing two different string elements of the same multidimensional array in Java
问:
我目前正在为即将到来的实践考试做练习题,但被卡住了。我写了一种方法来检查一组三张牌是有效还是无效,我们被告知“如果两张牌的形状、颜色或图案不同,即它们的属性都不匹配,那么它们就是不同的。如果两张牌具有相同的形状、颜色和图案,即它们的所有属性都匹配,则它们是相同的。如果一组三张牌由(i)三张不同的牌组成,或(ii)三张同一张牌组成,则该牌有效。目前,如果我运行我的程序,每组三张卡都会被评估为“有效”。我很确定问题不在于我读入和存储卡片及其属性的方式,因为我已经调试过了,所以我假设问题出在我的 cardsAreValid 方法的逻辑上,特别是我如何比较每张卡片的不同字符串元素(属性)。但是,我可能是错的。请帮忙。
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");
}
}
}
以防万一,示例文本文件卡 .txt 如下所示:
正方形,蓝色,点圆,红色,实心三角形,绿色,条纹 正方形,蓝色,点圆,红色,实心三角形,绿色,实心
正方形,蓝色,点方块,蓝色,点方块,蓝色,点方块,蓝色,点
正方形,蓝色,点三角形,绿色,条纹
答:
0赞
codingStarter
10/22/2023
#1
是的,你对我们的逻辑有问题。您当前正在检查您的卡片中是否有两张不同的卡片,因此,如果与 不同,但与 相同,您将得到 。因为所有三个变量 (, , ) 都将是假的。card1
card2
card3
valid
sameShape
sameColour
samePattern
尝试修改您的逻辑,以便它检查没有一张牌是相等的。您可能希望创建一个帮助函数,该函数将获取三个字符串,并检查它们是否都不相等。
评论