我需要一些提示: 我可以用
表示一个列表或一系列年份int startYear = 2010;
int endYear = 2050;
我有一个带字母和数字的枚举作为年份代码。
我需要这个用于条形码生成,其中我有一个时间戳需要编码成3位/字母,所以我需要将年月和日映射到代码位置。
我需要做的是将年序列映射到密钥的HashMap(年份数字)和值(年份代码),
但显然代码列表不像年份序列那么长,所以我需要检查何时到达最后一个索引,如果是,我需要重新遍历代码列表,直到达到年末序列。
我需要实现的是:
year code
2012 C
2013 D
.
.
2030 Y
2031 1
.
.
2039 9
2040 A
依旧......
不幸的是我无法弄清楚如何做到这一点,对于我来说,我对java很陌生,所以如果有人能给我一些建议,我会很感激..
答案 0 :(得分:1)
只需使用%
运算符来计算代码索引
List years = ...
List codes = ...
for (int i = 0, yearsSize = years.size(), codesSize = codes.size(); i < yearsSize; i++) {
map.put(years.get(i), codes.get(i % codesSize));
}
答案 1 :(得分:0)
这样的事情怎么样?:
假设:
public enum Code {
A, B, C, ... Z, 1, ... 9;
}
List<Integer> years;
HashMap<Integer,Code> map;
只需为代码添加一个索引,如果太大则会初始化:
int i = 0;
for(Integer year : years) {
map.push(year, Code.values()[i];
i++;
if(i >= Code.values().length) {
i = 0;
}
}
答案 2 :(得分:0)
在对年份进行编码之前,年份有效,因此%year%循环:
2012
假设MyEnum encodedYear = MyEnum.values()[yearToEncode - 2012];
是“零年”。
然后你可以使用:
MyEnum[] codes = MyEnum.values();
MyEnum encodedYear = codes[year % codes.length];
但如果零年是任意的话,你的代码会更简单:
{{1}}
答案 3 :(得分:0)
试试这个你甚至可以改变开始年份和结束年份
int yStart = 2010;
int yEnd = 2050;
String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int pos = 0;
for(int i = yStart; i < yEnd; i++){
pos = (i - yStart)%s.length();
map.put(i, s.substring(pos, pos+1));// put in map
System.out.println(i + " " + s.substring(pos, pos+1));
}