这是代码第二部分出现的第四天......
我尝试了他们提供的示例输入,它是正确的,我使用了我拥有的输入并且每次都出现错误
下面还有更多内容,但在您解决第一部分后会发生什么
输入因用户而异,但无论输入如何,代码都应相同
- 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");
}
}