我创建了一个这样的地图:
private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) {
Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>();
for (TSpecialTest specialTest : specialTestList) {
specialTestmap.put(persTestCode,specialTest);
}
if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){
errorVtr.add(specialTestList.get(persTestCode)+" max range is "+" "+specialTestList.get(persTestCode).getPersTestScrQyMax());
System.out.println("There was an error with > "+specialTestList.get(persTestCode).getPerTestTypeCd());
}
else if(specialTestList.get(persTestCode).getPersTestScrQyMax() > score){
errorVtr.add(specialTestList.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestList.get(persTestCode).getPersTestScrQyMin());
System.out.println("There was an error with < "+specialTestList.get(persTestCode).getPerTestTypeCd());
}
return errorVtr;
}
但是,无论您在何处看到persTestCode
,我的IDE都会显示运行时错误:get(int) in List cannot be applied to java.lang.String
通过在类的开头调用以下内容来设置此类:
SpecialTestImpl specialTest = ComponentBuilder.getInstance().getApplicationContext().getBean(SpecialTestImpl.class);
List<TSpecialTest> specialTestList = specialTest.specialTestList();
然后调用方法如下:
String persTestCode = elem.replace("scr.", "");
String score = request.getParameter(elem);
Vector errorVtr = new Vector();
//validates inputted test scores
vaildateTestScore(persTestCode, score, specialTestList,errorVtr);
--------------------解决-------------------------- ------
这对我来说是一个狡猾的问题。选项卡按钮和名称相似性得到了我最好的。这就是我想要做的。
private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) {
Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>();
for (TSpecialTest specialTest : specialTestList) {
specialTestmap.put(persTestCode,specialTest);
}
if (specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){
errorVtr.add(specialTestmap.get(persTestCode)+" max range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMax());
System.out.println("There was an error with > "+specialTestmap.get(persTestCode).getPerTestTypeCd());
}
else if(specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){
errorVtr.add(specialTestmap.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMin());
System.out.println("There was an error with < "+specialTestmap.get(persTestCode).getPerTestTypeCd());
}
return errorVtr;
}
答案 0 :(得分:1)
Java List get()
方法将整数作为列表的索引,并返回该索引处的对象。您可能会将此与您在方法开头添加的地图数据结构混淆。
答案 1 :(得分:1)
列表只提供get(int index)的方法,你不能使用get(instanceName)获取名为instanceName的实例。 补充: 你使用map #put(key,value)的方式是不正确的。我认为你应该仔细阅读java#api。
答案 2 :(得分:1)
这对myside来说完全过分了。由于specialTestList
和specialTestmap
的名称相同,我让IDE上的标签按钮让我感觉最好。
private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) {
Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>();
for (TSpecialTest specialTest : specialTestList) {
specialTestmap.put(persTestCode,specialTest);
}
if (specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){
errorVtr.add(specialTestmap.get(persTestCode)+" max range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMax());
System.out.println("There was an error with > "+specialTestmap.get(persTestCode).getPerTestTypeCd());
}
else if(specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){
errorVtr.add(specialTestmap.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMin());
System.out.println("There was an error with < "+specialTestmap.get(persTestCode).getPerTestTypeCd());
}
return errorVtr;
}
答案 3 :(得分:0)
specialTestList.get(persTestCode)
正试图传递List#get(int)
传递 String
,因此当然会失败。
也许您打算使用地图specialTestmap
代替;它将采用get(String)
方法,因为您创建的地图由String
键入。
另请注意
if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){
...将我怀疑的int
(getPersTestScrQyMin()
的结果)与字符串 score
进行比较。
这个循环非常可疑:
for (TSpecialTest specialTest : specialTestList) {
specialTestmap.put(persTestCode,specialTest);
}
您反复使用相同的键值persTestCode
。后续的put将覆盖之前的put,因此循环没有任何意义。
答案 4 :(得分:0)
问题似乎很清楚。
使用List<TSPecialTest>
,您可以使用的唯一get
功能是:
List#get(int)
但您尝试使用get
作为参数调用方法String
。
您的目标当然是从String
所附的列表中获取值,而不是使用List
答案 5 :(得分:0)
List.get()方法需要一个整数索引,您传递一个String值。
if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){
https://docs.oracle.com/javase/7/docs/api/java/util/List.html#get(int)
您可能希望从地图中获取一个对象,如下所示:
if (specialTestmap.get(persTestCode).getPersTestScrQyMin() < score){