1

这是代码第二部分出现的第四天......
我尝试了他们提供的示例输入,它是正确的,我使用了我拥有的输入并且每次都出现错误

我所看到的 1

我所见 2

下面还有更多内容,但在您解决第一部分后会发生什么

代码出现第 4 天
拼图输入

输入因用户而异,但无论输入如何,代码都应相同

  • byr(出生年份) - 四位数字;至少 1920 年,最多 2002 年。
  • iyr(发行年份)——四位数字;至少 2010 年,最多 2020 年。
  • eyr(到期年份)——四位数字;至少 2020 年,最多 2030 年。
  • hgt(高度)- 后跟 cm 或 in 的数字:
    • 如果是厘米,则数字必须至少为 150,最多为 193。
    • 如果在,则该数字必须至少为 59 且最多为 76。
  • hcl(头发颜色) - 一个 # 后跟六个字符 0-9 或 af。
  • ecl(眼睛颜色)- 恰好是以下之一:amb blu brn gry grn hzl oth。
  • pid (Passport ID) - 一个九位数字,包括前导零。
  • cid (Country ID) - 忽略、缺失与否。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        File inputText = new File("src/input.txt");
        Scanner sc = new Scanner(inputText);
        ArrayList<ArrayList> ids = new ArrayList<>();
        ArrayList<ArrayList> attributes = new ArrayList<>();


        while (sc.hasNextLine()) {
            String builtString = "";
            String input = "1";

            while(input.length() != 0 && sc.hasNextLine()) {
                input = sc.nextLine();
                builtString += input + " ";
            }
            String[] temp = builtString.split(" ");
            ArrayList<String> tempIds = new ArrayList<>();
            ArrayList<String> tempAttributes = new ArrayList<>();
            for (String i : temp) {
                tempIds.add(i.split(":")[0]);
                tempAttributes.add(i.split(":")[1]);
            }
            ids.add(tempIds);
            attributes.add(tempAttributes);
        }
        System.out.println(ids);
        System.out.println(attributes);
        int valid = 0;

        for (int a = 0; a < ids.size(); a++) {
            int has = 0;
            for (int j = 0; j < ids.get(a).size(); j++) {
                String id = ids.get(a).get(j).toString();
                String attribute = attributes.get(a).get(j).toString();
                if (id.contains("ecl")) {
                    if (attribute.contains("blu") || attribute.contains("brn") || attribute.contains("gry") || attribute.contains("grn") || attribute.contains("hzl") || attribute.contains("oth")) {
                        System.out.println(attribute + " is an eye color");
                        has++;
                    } else {
                        System.out.println(attribute + " is not an eye color");
                    }
                    has++;
                }
                if (id.contains("pid")) {
                    if (attribute.length() == 9) {
                        try {
                            Integer.parseInt(attribute);
                            System.out.println(attribute + " of pid attribute is valid ");
                            has++;
                        } catch (Exception e) {
                            System.out.println(attribute + " of pid attribute is not valid");
                        }
                    }
                    has++;
                }
                if (id.contains("eyr")) {
                    int at = Integer.parseInt(attribute);
                    if (at >= 2020 && at <= 2030) {
                        System.out.println(attribute + " attribute of eyr is valid");
                        has++;
                    } else {
                        System.out.println(attribute + " attribute of eyr is not valid");
                    }
                    has++;
                }
                if (id.contains("hcl")) {
                    boolean isValid = false;
                    if (attribute.contains("#")) {
                        for (char c : attribute.toCharArray()) {
                            if (attribute.length() == 7) {
                                if ((c >= 'a' && c <= 'f') || c == '#') {
                                    isValid = true;
                                } else if (Character.isDigit(c)) {
                                    isValid = true;
                                } else {
                                    isValid = false;
                                    break;
                                }
                            }
                        }
                    }

                    if (isValid) {
                        has++;
                    }
                    System.out.println(attribute + " hcl is " + isValid);
                    has++;
                }
                if (id.contains("byr")) {
                    int date = Integer.parseInt(attribute);
                    if (date >= 1920 && date <= 2002) {
                        System.out.println(attribute + " byr attribute is valid");
                        has++;
                    } else {
                        System.out.println(attribute + " byr attribute is not valid");
                    }
                    has++;
                }
                if (id.contains("iyr")) {
                    int date = Integer.parseInt(attribute);
                    if (date >= 2010 && date <= 2020) {
                        has++;
                    } else {
                        System.out.println(attribute + " iyr is false");
                    }
                    has++;
                }
                if (id.contains("hgt")) {
                    boolean isValid = false;
                    String type = attribute.replaceAll("[^A-Za-z]", "");
                    int amount = Integer.parseInt(attribute.replaceAll("[^0-9]", ""));
                    if (type.equals("in")) {
                        if (amount >= 59 && amount <= 76) {
                            isValid = true;
                            has++;
                        }
                    } else if (type.equals("cm")) {
                        if (amount >= 150 && amount <= 193) {
                            isValid = true;
                            has++;
                        }
                    }
                    System.out.println(attribute + " hgt is " + isValid);
                    has++;
                }
            }
            System.out.println();
            if (has >= 14) {
                valid++;
            }
        }
        System.out.println(valid);
        System.out.println("End");
    }
}
4

1 回答 1

0

你忘记了“amb”的眼睛颜色。如果将此添加到第 41 行的 if 语句中,它应该可以工作

if (attribute.contains("amb") || attribute.contains("blu") || attribute.contains("brn") || attribute.contains("gry") || attribute.contains("grn") || attribute.contains("hzl") || attribute.contains("oth")) {
于 2020-12-30T23:21:53.933 回答