【发布时间】:2020-12-02 19:17:45
【问题描述】:
这是针对 AOC 第 2 天的。输入内容类似于
"6-7 z: dqzzzjbzz
13-16 j: jjjvjmjjkjjjjjjj
5-6米:mmbmmlvmbmmgmmf
2-4 k: pkkl
16-17 k: kkkkkkkkkkkkkkkqf
10-16 秒:mqpscpsszscsssrs
..."
它的格式类似于“最小最大字母:密码”并以行分隔。我应该找出满足最低和最高要求的密码数量。我将所有提示放入一个字符串变量中,并使用Pattern.quote("\n") 将这些行分隔成一个字符串数组。这工作得很好。然后,我通过创建一个模式Pattern.compile("[^0-9]|-"); 并为数组中的每个索引运行它并使用.trim() 切断每个字符串末尾和开头的空格,替换了除数字和“-”之外的所有字母。这一切都很好,我得到了像6 7和13 16这样的期望输出。
但是,现在我想尝试将这个字符串分成两部分。这是我的代码:
HashMap<Integer,Integer> numbers = new HashMap<Integer,Integer>();
for(int i = 0; i < inputArray.length; i++){
String [] xArray = x[i].split(Pattern.quote(" "));
int z = Integer.valueOf(xArray[0]);
int y = Integer.valueOf(xArray[1]);
System.out.println(z);
System.out.println(y);
numbers.put(z, y);
}
System.out.println(numbers);
所以,首先制作一个存储 6 7 和13 16 字符串的每个索引分成两个,由“”确定。 System.out.println(z); 和 System.out.println(y); 正在按预期工作。
6
7
13
16
...
这个输出继续给我 2000 个整数,每次用一行分隔。这正是我想要的。但是,System.out.println(numbers); 正在输出:
{1=3, 2=10, 3=4, 4=7, 5=6, 6=9, 7=12, 8=11, 9=10, 10=18, 11=16, 12=13, 13=18, 14=16, 15=18, 16=18, 17=18, 18=19, 19=20}
我什至不知道从哪里开始调试它。我用一个格式为“偶数、奇数”整数的数组制作了一个测试文件,一直到 100。使用完全相同的代码(我确实更改了变量名),我得到了更好的输出。这并不是完全需要的,因为它从 350=351 开始,然后到 11=15,并按非时间顺序继续,但至少它包含所有 100 个键和值。
另外,完全不相关的问题,但我的 for 循环格式是否正确?代码开头和结尾的多余空格?
编辑:我希望我的预期输出类似于{6=7, 13=16, 5=6, 2=4, 16=17...}。基本上,hashmap 将具有最小值和最大值作为键和值,并且按时间顺序排列。
【问题讨论】:
-
代码拼图输入的出现因用户而异,因此您的链接无法帮助其他人了解您正在使用的输入。我最初的猜测是,您的输入可能包含每个
z值的多个副本,因此您稍后遇到的一对 (6=9) 会覆盖您添加的以 (6=7) 开头的对。但如果没有看到输入,我无法验证这一点。 -
您应该提供问题或简短摘要以及示例输入和预期输出。您发布的链接仅供登录用户使用。