这是一个程序,它将String保存为String数组中的键和计数。但 如条件子句(// CONDITION)所示,我无法检查天气中数组的元素是否包含任何值?
我知道它会抛出异常“java.lang.ArrayIndexOutOfBoundsException”,因为它无法将内存分配给未指定的元素。我试图做“nextString.equals(arrays [i + 1])”,它不起作用。
请说明我可以使用的任何条件。
public void mapExample() {
String text = "text good text good text";
String[] arrays = text.split(" ");
Arrays.sort(arrays);
for(String array :arrays ){
System.out.println(array);
}
int Count=0;
String thisSring = "";
String nextString="";
TreeMap<String,Integer> mapper = new TreeMap<String , Integer>();
for(int i=0;i<arrays.length;++i){
thisSring = arrays[i];
Count++;
nextString = arrays[i+1];
if(!thisSring.equals(nextString)){
mapper.put(thisSring, Count);
}
if(//CONDITION){
mapper.put(thisSring, Count);
}
}
Set s = mapper.entrySet();
Iterator iter = s.iterator();
if(iter.hasNext()){
System.out.println(iter.next());
Map.Entry map = (Map.Entry) iter.next();
System.out.println( "Key" + " " + map.getKey());
System.out.println("Value" + " " + map.getValue());
}
}
}
答案 0 :(得分:0)
您的错误比您想象的要早,
for(int i=0;i<arrays.length - 1;++i){ // Add a "- 1" because,
thisSring = arrays[i];
Count++;
nextString = arrays[i+1]; // this will exceed the array length otherwise.
if(!thisSring.equals(nextString)){
mapper.put(thisSring, Count);
}
}
答案 1 :(得分:0)
...equals(String.valueOf(nextString))
让我解释一下,如果你要对两个String对象进行等于比较,那么“.equals”函数会检查对象是否相等,而不是对象的值。使用“.valueOf()”
解决这个问题其次,你有一个“ArrayIndexOutOfBoundsException”。这通常是由所谓的逐个错误引起的。移动“Count ++;”到for循环的结尾,我认为这会阻止它抛出异常。
答案 2 :(得分:0)
首先,你必须改变:
for(int i=0;i<arrays.length;++i){
为:
for(int i=0;i<arrays.length-1;++i){
因为您正在使用i+1
其次,既然您正在使用count++
- 您实际上并没有计算任何东西。
你必须检查字符串是否已经在TreeMap中,如果是 - 将计数更新为:
mapper.get(thisSring) + 1
如果不是,请使用count = 1
创建一个新项目:
String thisSring = "";
String nextString="";
TreeMap<String,Integer> mapper = new TreeMap<String , Integer>();
for(int i=0;i<arrays.length;++i){
thisSring = arrays[i];
nextString = arrays[i+1];
if(mapper.get(thisString) != null){
mapper.put(thisSring, mapper.get(thisString) + 1);
}
else {
mapper.put(thisSring, 1);
}
}
答案 3 :(得分:0)
更改循环:
for (int i =0;i<arrays.length;i++) {
要
for (int i =0;i<arrays.length-1;i++) {
找到以下代码:
for (int i =0;i<arrays.length-1;i++) {
thisString = arrays[i];
count++;
nextString = arrays[i+1];
if(!thisString.equals(nextString)){
mapper.put(thisString, count);
}
if (i<arrays.length-2) {
mapper.put(thisString, count);
}
}