我正在尝试使用HashMap
为大写字母分配整数值。
我能够为一个角色分配一个值;但是,我需要将每个值存储到特定字符[请记住,字母和整数值都由用户指定]。这是我需要帮助的地方。
我需要将用户定义的整数值存储到用户定义的字符中,并且对于每个字母,如果没有赋予整数值,那么它保留其在字母表中的位置的整数值。我无法弄清楚如何使用HashMap
对象
目前我将char值存储在char中>>> mapObj.put(ch,intValue);
并呼叫为>> int getValue = mapObj.get(ch);
但是如果可能的话,它只调用我想要同时调用字母和值的值。
我已经尝试过循环它并在循环时,我都无法使逻辑正确。
Map<Character, Integer> mapObj = new HashMap<Character, Integer>();
Scanner kbd = new Scanner(System.in);
String str = " ";
char ch = ' ';
int startIndex;
int strLength;
int value = 0;
String strValue = " ";
while(kbd.hasNext())
{
str = kbd.nextLine();
if(str.equals("QUIT"))
{
break;
}
else
{
ch = str.charAt(0);
startIndex = str.lastIndexOf(" ")+1;
StringLength = str.length();
strValue = str.substring(startIndex,StringLength);
value = Integer.parseInt(strValue);
System.out.println(""+strValue);
tempIndex.put(ch,value);
int VarValue = tempIndex.get(ch);
System.out.println(ch+" = "+VarValue);
}
}
答案 0 :(得分:0)
没有给你代码(为你的作业),这里有两种不同的情况(如果我理解你的问题):
这可以通过以下方式实现:
map.put()
覆盖)现在你有一张你想要的地图。
答案 1 :(得分:0)
如果你想在地图中存储26个值,为什么不对这个可怜的旧微处理器产生一点机械上的同情并只使用一个阵列呢?
例如,HashMap实现......
package stackoverflow;
import java.util.HashMap;
import java.util.Map;
public class MapVsArray1 {
public static void main(String[] args) {
String input = "The quick lazy fox forgets how to type the sentance so that each letter appears only once and something to do with jumping over something";
Map<Character, Integer> map = new HashMap<>();
for (int k = 0; k < input.length(); k++) {
char key = Character.toUpperCase(input.charAt(k));
if (key >= 'A' && key <= 'Z') {
Integer currentCount = map.get(key);
if (currentCount == null) {
currentCount = 0;
}
currentCount++;
map.put(key, currentCount);
}
}
// Output results (rely on HashMap's toString)...
System.out.println(map);
}
}
输出:
{D=2, E=14, F=2, G=4, A=7, C=4, L=3, M=3, N=8, O=12, H=8, I=5, J=1, K=1, U=2, T=14, W=2, V=1, Q=1, P=4, S=6, R=4, Y=3, X=1, Z=1}
而使用数组...
package stackoverflow;
public class MapVsArray2 {
public static void main(String[] args) {
String input = "The quick lazy fox forgets how to type the sentance so that each letter appears only once and something to do with jumping over something";
int[] counts = new int[26];
for (int k = 0; k < input.length(); k++) {
char key = Character.toUpperCase(input.charAt(k));
if (key >= 'A' && key <= 'Z') {
counts[key - 'A']++;
}
}
// Output results...
for (int i = 0; i < counts.length; i++) {
char letter = (char) ('A' + i);
System.out.print(letter + "=" + counts[i] + " ");
}
}
}
...输出
A=7 B=0 C=4 D=2 E=14 F=2 G=4 H=8 I=5 J=1 K=1 L=3 M=3 N=8 O=12 P=4 Q=1 R=4 S=6 T=14 U=2 V=1 W=2 X=1 Y=3 Z=1
基本上,阵列解决方案的计算成本较低。
答案 2 :(得分:0)
已经阅读了十次以上的问题,但仍然不明白你在问什么。你说
我已经尝试过循环它并在循环时,我都无法使逻辑正确。
我打赌你要求在Map
右边的条目中进行迭代? (无论如何,我无法看到你引用无关代码的意思......)
如果是这种情况,我们通常会这样做:
Map<Foo, Bar> myMap = ....;
for (Map.Entry<Foo,Bar> entry : myMap.entrySet()) {
System.out.println("key is a Foo, which is " + entry.getKey());
System.out.println("value is a Bar which is " + entry.getValue());
}
答案 3 :(得分:0)
首先创建一个Map<Character, Integer>
并使用 {A
- Z
} 和 {1
- {{1 }}} 强>
26
如果我们现在运行Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i + 'A' <= 'Z'; i++) {
char key = (char) ('A' + i);
int defaultValue = i + 1;
map.put(key, defaultValue);
}
,我们会看到
{A = 1,B = 2,C = 3,D = 4,E = 5,F = 6,G = 7,H = 8,I = 9,J = 10,K = 11,L = 12,M = 13,N = 14,O = 15,P = 16,Q = 17,R = 18,S = 19,T = 20,U = 21,V = 22,W = 23,X = 24, Y = 25,Z = 26}
表示System.out.println(map);
现在已初始化。接下来,我将使用map
和hasNextLine()
以及更通用的nextLine()
名称。如果您想使用由文件支持的Scanner
怎么办?我使用String.split(String)
将输入分为令牌。像,
Scanner